Daniel: Gleiche Werte in Arrays zählen

Hallo!

Wie zum Donner schaffe ich es, eine Funktion zu schreiben, die in einem Array beliebige gleiche Werte zählt und mir die Werte und die Anzahl zurückgibt, also z.B.:

var Fruechte = new Array(Zitrone,Apfel,Birne,Zitrone,Zitrone,Apfel);

gleicheWerte(Fruechte);

soll folgendes Array zurück geben:

(Apfel,2,Birne,1,Zitrone,3)

Die Werte zu sortieren ist kein Problem, aber dann jeden Wert mit jedem zu vergleichen und zu zählen...

Wer kann mir helfen?

Grüße,

Daniel

  1. n'Abend.

    Wie zum Donner schaffe ich es, eine Funktion zu schreiben, die in einem Array beliebige gleiche Werte zählt und mir die Werte und die Anzahl zurückgibt

    Üben, üben, üben.

    var Fruechte = new Array(Zitrone,Apfel,Birne,Zitrone,Zitrone,Apfel);

    Zitrone, Apfel und Birne sind leider gerade aus, die gibt's aber auch noch als Zeichenketten:

    Fruechte = new Array("Zitrone","Apfel","Birne","Zitrone","Zitrone","Apfel");

    gleicheWerte(Fruechte);

    Ah so, nett.

    soll folgendes Array zurück geben:

    (Apfel,2,Birne,1,Zitrone,3)

    Okay.

    Die Werte zu sortieren ist kein Problem, aber dann jeden Wert mit jedem zu vergleichen und zu zählen...

    ... ist auch keins.

    Wer kann mir helfen?

    Naja, solange du am üben, üben, üben bist, kannst du mein Script haben:

    <script type="text/javascript">
    <!--
     function vna(a1) // values and amounts (array)
      {
       a1.sort();
       var a2 = new Array();
       for(var i = 0; i < a1.length; i++)
        {
         if(typeof(a2[a1[i]]) == "undefined")
          {
           a2[a2.length] = a1[i];
           a2[a1[i]] = 1;
          }
         else{a2[a1[i]]++}
        }
       var a3 = new Array();
       for(var i = 0; i < a2.length; i++)
        {
         a3[a3.length] = a2[i];
         a3[a3.length] = a2[a2[i]];
        }
       return a3;
      }
     Fruechte = new Array("Zitrone","Apfel","Birne","Zitrone","Zitrone","Apfel");
     document.open("text/html");
     document.write('<h1>' + vna(Fruechte).join(",") + '</h1>');
     document.close();
    //-->
    </script>

    Und wenn du willst, darfst du die Funktion vna auch in gleicheWerte umbenennen.

    Gruß
    Norbert

    1. Hallo Nobert!

      Vielen herzlichen Dank für Deine Antwort.

      Ich verspreche, zu üben, üben, üben :-)

      Und wenn du willst, darfst du die Funktion vna auch in gleicheWerte umbenennen.

      Mach ich.

      Gruß
      Norbert

      Viele Grüße,

      Daniel

  2. Hallo!

    Hi

    var Fruechte = new Array(Zitrone,Apfel,Birne,Zitrone,Zitrone,Apfel);

    1. Da würden "" fehlen.
    2. Geht nicht. Als Argument kann man die Anzahl der Elemente im Array übergeben.

    gleicheWerte(Fruechte);

    soll folgendes Array zurück geben:

    (Apfel,2,Birne,1,Zitrone,3)

    function gleicheWerte(array) {
    var bekannt = new Array();
    for (var i in array) {
      if (in_array(bekannt,array[i]) !== false) {
        var bekannt_wert = new Array(2);
        bekannt_wert[0] = array[i];
        bekannt_wert[1] = 1;
        bekannt.push(bekannt_wert);
      }
      else {
        bekannt[in_array(bekannt,array[i])][1]++;
      }
    }
    var rueckgabe = new Array();
    for (var i in bekannt) {
    rueckgabe.push(bekannt[i][0]);
    rueckgabe.push(bekannt[i][1]);
    }
    return rueckgabe;
    }

    function in_array(array,elem) {
    for (var i in array) {
    if (array[i][0] == elem)
    return i;
    }
    return false;
    }

    Müsste eigentlich (bewusst Konjunktiv verwendet) gehen

    Grüße,

    Tschüss

    Daniel

    Tim

    1. Hallo Tim,

      ich Danke Dir für Deine Hilfe.
      Dein Code ist für mich sehr gut nachvollziehbar.

      Danke auch für die Korrektur meiner Frage (ich hoffe, daß ich das Niveau dieses Forums nicht all zu sehr runtergezogen hab).

      Viele Grüße,

      Daniel