HendrikO: Vergleich zweier Arraywerte

Hallo Leute,
ich habe ein Problem mit einem Javascript. Ich habe zwei zweidimensionale Arrays (Fahrer[][] und Kleidung[][]) mit Werten gefüllt und möchte im Array Kleidung[i][0] prüfen, welche Werte mit dem Array Fahrer[j][0] übereinstimmen. Darum habe ich zwei For-Schleifen verschachtelt. Wenn ein Datensatz aus Kleidung[i][0] mit einem Datensatz aus Fahrer[j][0] übereinstimmt, soll das Ergebnis in das dritte Array Kleidungsbastard geschrieben werden. Also hier ist der Code dafür:

//Hier ist die Befüllung der Arrays abgeschlossen und das es wird geschaut, welcher Kind-DS zu welchem Eltern-DS  
//gehört (anhand der FKLID der Kleidung)  
Kleidungsbastard = new Array(); //Dieses Array enthält den Endmix aus Eltern-DS und Kind-DS  
count=0;  
for(i=1;i<=Kleidung.length;i++)	{  
	alert("i "+i);  
  
	  
	for(j=1;j<=Fahrer.length;j++)	{  
  
		if(Fahrer[j][0]==Kleidung[i][0])	{			  
		Kleidungsbastard[count] = new Array();  
		Kleidungsbastard[count][0]=Fahrer[j][0];  
		Kleidungsbastard[count][1]=Fahrer[j][1];  
		Kleidungsbastard[count][2]=Fahrer[j][2];  
		Kleidungsbastard[count][3]=Kleidung[i][0];  
		Kleidungsbastard[count][4]=Kleidung[i][1];  
		Kleidungsbastard[count][5]=Kleidung[i][2];  
		alert(Kleidungsbastard[count][0] +" "+ Kleidungsbastard[count][1] +" "+ Kleidungsbastard[count][2] +" "+ Kleidungsbastard[count][3] +" "+ Kleidungsbastard[count][4] +" "+ Kleidungsbastard[count][5]);  
		count++;  
			}  
		}  
	}

Leider funktioniert diese Schleife nur einen Durchlauf. D.h. beim ersten Durchlauf wird mir das Ergebnis mit dem Alert-Befehl angezeigt (alert(Kleidungsbastard...). Beim zweiten Durchlauf der "Kleidungs-For-Schleife", ist der Wert im Array Fahrer[j][0] plötzlich nicht mehr definiert oder Null.

Hab ich einen logischen Fehler drin?

Danke für eure Anworten.

Grüße
Hendrik

  1. Leider funktioniert diese Schleife nur einen Durchlauf. D.h. beim ersten Durchlauf wird mir das Ergebnis mit dem Alert-Befehl angezeigt (alert(Kleidungsbastard...). Beim zweiten Durchlauf der "Kleidungs-For-Schleife", ist der Wert im Array Fahrer[j][0] plötzlich nicht mehr definiert oder Null.

    Das heißt du hast eine Fehlermeldung in der Konsole?

    Hab ich einen logischen Fehler drin?

    Vermutlich ja, deine Schleifen laufen wahrscheinlich einmal zu oft.

    Struppi.

    1. »» Leider funktioniert diese Schleife nur einen Durchlauf. D.h. beim ersten Durchlauf wird mir das Ergebnis mit dem Alert-Befehl angezeigt (alert(Kleidungsbastard...). Beim zweiten Durchlauf der "Kleidungs-For-Schleife", ist der Wert im Array Fahrer[j][0] plötzlich nicht mehr definiert oder Null.

      Das heißt du hast eine Fehlermeldung in der Konsole?

      »» Hab ich einen logischen Fehler drin?

      Vermutlich ja, deine Schleifen laufen wahrscheinlich einmal zu oft.

      Struppi.

      Hallo Struppi,
      Punktlandung das war es ;). Das die Arrays in JS bei 0 anfangen hatte ich gewusst, es wurde mir nur so vorgegeben, dass diese beiden Arrays mit einem ersten Index ab 1 befüllt wurden. Das Problem war jetzt jedoch, dass ich als For-Bedingung i<=Kleidung.length eingegeben habe. Damit hat er am Ende noch einen Durchlauf zu viel gemacht. Danke für eure schnelle Hilfe.

      Gruß
      Hendrik

  2. Hi Hendrik,

    ohne den Code im Detail betrachtet zu haben:
    Arrays in Javascript beginnen bei Index 0, d.h.:
    var a=new Array(2);
    erlaubt den Zugriff auf a[0] und a[1] (und nicht a[1] und a[2]).

    Gruß,
    Richard

  3. n'abend,

    for(i=1;i<=Kleidung.length;i++) {
    for(j=1;j<=Fahrer.length;j++) {
    if(Fahrer[j][0]==Kleidung[i][0])

    Wie viele Elemente haben die beiden Arrays denn? Können mehrere Fahrer die gleiche Kleidung haben, resp. mehrere Kleidungsstücke den selben Fahrer? Wie häufig wird dieser Vergleich ausgeführt?

    (Diese Fragen beziehen sich auf eine mögliche Optimierung deiner Vorgehensweise, solltest du daran kein Interesse haben, einfach ignorieren.)

    weiterhin schönen abend...

    --
    #selfhtml hat ein Forum?
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|