twb: Arrayelemente zählen?

Liebe alle - im Zusammenhang mit meinem Web Sudoku (URL oben) tauchte folgende Grundsatzfrage auf: Gibt es in Javascript eine Möglichkeit, gleiche Variablen (Werte oder Strings) innerhalb eines Arrays zu zählen? Oder etwas ausführlicher: In einem Beispielarray

Farben=new Array("grün", "gelb", "blau", "grün", "rot");

würde ich gern mittels einer Array-Methode die Anzahl "grün" ermitteln. Als Parameter würde also "grün" übergeben; der Rückgabewert müsste die Anzahl des Strings "grün" sein, hier also 2. Ich werde und werde nicht fündig.

Ich hab's in meiner Verzweiflung schliesslich anders gelöst - und dabei sicherlich um sieben Ecken herum gedacht. Ich sortiere nun also den Array

Farben.sort(); wandle ihn danach mittels

Farben.join(""); in einen String ohne Trennzeichen um und ermittle schliesslich mittels

if (Farben.indexOf("grüngrün")!=-1) (undsoweiter)

, ob der gesuchte String mehr als einmal vorkommt. Unheimlich umständlich, das Ganze, selbst wenn es anstandslos funktioniert.

Mit Dank! Thomas

  1. hi,

    Gibt es in Javascript eine Möglichkeit, gleiche Variablen (Werte oder Strings) innerhalb eines Arrays zu zählen?

    Durchlaufe das Array in einer Schleife, vergleiche jeden Wert mit dem gesuchten - und zähle die Treffer mit.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Durchlaufe das Array in einer Schleife, vergleiche jeden Wert mit dem gesuchten - und zähle die Treffer mit.

      for (i=ich;i<Volltrottel;i++) Hand.aufStirn("klatsch");

      Und ich zermarterte mir das Hirn nach Möglichkeiten à la Array.count();... Danke! Manchmal sehe ich den Wald vor lauter Bäumen nicht mehr.

      1. Hallo twb.

        for (i=ich;i<Volltrottel;i++) Hand.aufStirn("klatsch");

        Hm, du willst eines Tages Volltrottel werden? Interessante Zukunftspläne.

        Einen schönen Mittwoch noch.

        Gruß, Mathias

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
        1. hi,

          for (i=ich;i<Volltrottel;i++) Hand.aufStirn("klatsch");

          Hm, du willst eines Tages Volltrottel werden? Interessante Zukunftspläne.

          Das i++ wundert mich viel mehr - ob da diverse Spam-Mails, die für gewisse "Enlargements" werben, Zweifel gesäht haben ...?

          scnr,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
        2. Moin Mathias,

          for (i=ich;i<Volltrottel;i++) Hand.aufStirn("klatsch");
          Hm, du willst eines Tages Volltrottel werden? Interessante Zukunftspläne.

          Aber nein, lies doch die Anweisung etwas genauer:

          Er möchte über die gesamte Distanz zwischen sich und dem Volltrottel die Stirn an der Hand auf "klatsch" anwenden.

          Ich vermute aber, er meinte eigentlich
             Hand.klatsch(Stirn);
          denn unter einer Methode aufStirn() kann ich mir im Moment nicht viel vorstellen - vor allem, warum sie eine Methode des Objekts Hand sein sollte. ;-)

          So long,
           Martin

          --
          Man soll den Tag nicht vor dem Abend loben.
          Und den Mann nicht vor dem Morgen.
            (alte Volksweisheit)
          1. Hallo Martin.

            for (i=ich;i<Volltrottel;i++) Hand.aufStirn("klatsch");
            Hm, du willst eines Tages Volltrottel werden? Interessante Zukunftspläne.

            Aber nein, lies doch die Anweisung etwas genauer:

            Er möchte über die gesamte Distanz zwischen sich und dem Volltrottel die Stirn an der Hand auf "klatsch" anwenden.

            Ich lese es eher so:

            Sei „i“ gleich ich und erhöhe „i“ so lange, bis es nicht mehr kleiner als ein Volltrottel ist.

            Einen schönen Donnerstag noch.

            Gruß, Mathias

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
            [HTML Design Constraints: Logical Markup]
  2. Liebe alle - im Zusammenhang mit meinem Web Sudoku (URL oben) tauchte folgende Grundsatzfrage auf: Gibt es in Javascript eine Möglichkeit, gleiche Variablen (Werte oder Strings) innerhalb eines Arrays zu zählen? Oder etwas ausführlicher: In einem Beispielarray

    Farben=new Array("grün", "gelb", "blau", "grün", "rot");

    würde ich gern mittels einer Array-Methode die Anzahl "grün" ermitteln. Als Parameter würde also "grün" übergeben; der Rückgabewert müsste die Anzahl des Strings "grün" sein, hier also 2. Ich werde und werde nicht fündig.

    Dafür bietet sich ein assoziative Array an, dass es zwar in JS so nicht gibt, aber mit einem Objekt nachgebaut werden kann.

      
    Array.prototype.count = function( was )  
    {  
       var tmp = {};  
       for(var i = 0; i < this.length; i++) if(tmp[this[i]]) tmp[this[i]]++ else tmp[this[i]] = 1;  
       return tmp[was]  
    }  
      
    var Farben = new Array("grün", "gelb", "blau", "grün", "rot");  
      
    alert(Farben.count('grün'));  
    
    

    Struppi.

    --
    Javascript ist toll (Perl auch!)