2016-03-29 16 views
0

Ich versuche, zwei Arrays zu vergleichen und ein neues Array mit beliebigen Elementen zurückgeben, die nur in einem der beiden angegebenen Arrays gefunden werden.Woher kommt dieser undefinierte Wert?

z.B. Das Ergebnis des Vergleichs [1,2,3,4] und [1,2,3] sollte sein: .

Problem ist, dass ich 'undefined' Element nach Schleife ausgeführt wird.

function diff(arr1, arr2){ 
    var newArr = []; 
    for(i=arr1[0]; i<=arr1.length; i++){ 
     if(arr2.indexOf(arr1[i])=== -1){ 
     newArr.push(arr1[i]); 
     } 
    } 
    console.log(newArr); 
}; 

diff([1,2,3,4], [1,2,3]); 

Daraus ergibt sich, [4, undefined]. Was mache ich falsch?

+6

'i = arr1 [0]' ist wahrscheinlich nicht das, was Sie – user234461

+3

bis 'Looping wollen <= length' ist ein klassischer Fehler von eins nach eins. – deceze

Antwort

1

Ihre for Schleife wurde falsch definiert. Es sollte bei i=0 beginnen und läuft bis zur i<arr1.length

function diff(arr1, arr2){ 
    var newArr = []; 
    for(i=0; i<arr1.length; i++){ 
     if(arr2.indexOf(arr1[i])=== -1){ 
     newArr.push(arr1[i]); 
     } 
    } 
    console.log(newArr); 
}; 

Durch den Betrieb bis i<=arr1.length Sie noch einmal zu wiederholen versuchen, als benötigt wird, in der Zugabe des letzten undefinierten Wertes im Ergebnis Array führt. Wie Mario Garcia in Kommentaren sagt, wird die Schleife in der letzten Iteration versuchen, auf arr[4] zuzugreifen, was nicht existiert, ist also undefiniert.

+0

Um es klar zu sagen: arr1 [4] = undefiniert, und da arr2 nicht "undefined" enthält, fügt Ihre Funktion es zu newArr hinzu. Fixiere einfach deine Loop-Indizes wie oben erwähnt –

+0

Danke, ich brauche Schlaf, denke ich :) – 11223342124

+0

Kein Problem! Einfache Fehler zu machen – millerbr

0

Ihre Schleife ist falsch, weil Ihr Iterator nicht von 0 startet (um mit dem ersten Array-Element übereinzustimmen), sondern vom Wert des Arrays am Index Null (was in Ihrem Fall die Nummer 1 ist, aber hübsch sein könnte) viel alles); und dann gehen Sie außerhalb des Indexbereichs, wenn der Iterator die Länge eines Arrays erreicht, in Ihrem Fall ist es 4, und arr1 [4] ist nicht definiert.

Nach dem Schleifenstartwert und Zustand Fixierung, erhalten wir:

function diff(arr1, arr2){ 
 
    var newArr = []; 
 
    for(i = 0; i < arr1.length; i++){ 
 
     if(arr2.indexOf(arr1[i])=== -1){ 
 
     newArr.push(arr1[i]); 
 
     } 
 
    } 
 
    alert(newArr); 
 
}; 
 

 
diff([1,2,3,4], [1,2,3]); // 4 
 
diff([1,2,3,4,5], [1,3]); // 2, 4, 5