2017-04-23 4 views
1

So im Lernen über die verschiedenen Array Iterieren Methoden und lief in etwas Merkwürdiges:Javascript für jedes Array Callback Timing?

[1,2,3].forEach(function(element,index,arr){ 
     console.log(element,index); 
    console.log(arr); 
    arr.shift(); 
}) 

So würden Sie denken, diese produzieren würde:

1,0 
[1,2,3] 
2,1 
[2,3] 
3,2 
[3] 

aber Sie diese:

1 0 
[1, 2, 3] 
3 1 
[2, 3] 

Im Drucken von 3 trotz haben nur am Ende verschoben? Liegt das daran, dass der arr-Callback am Anfang des nächsten Elements oder so passiert? Da sollte es shift() auf dem Array AFTER tun? Ich weiß, dass dies ein "schlechter Fall" ist, wenn ich diese Methode benutze, ich bin nur neugierig, warum das passiert.

+0

Das Ändern der Länge des Arrays während der Iteration wird nicht empfohlen ... – nnnnnn

Antwort

6

Die .length des Arrays wurde geändert. Das Element neben dem Element mit dem Index 0 wird zum Index 0 nach dem Aufruf .shift().

2

Die Antwort auf Ihre Frage ist in der Dokumentation der Schichtmethode beschrieben.

Wie pro MDN von here

Die Verschiebungsverfahren entfernt das Element an der nullten Index und verschiebt die Werte an aufeinander folgenden Indizes nach unten, dann gibt die entfernt Wert. Wenn die length-Eigenschaft 0 ist, wird undefined zurückgegeben.

Also, wenn der Schaltvorgang der Original-Array durchgeführt wird, wird aus [1,2,3]-[2,3] und dem Wert der Index-Schritte 0-1 geändert. Als nächstes ist die dritte Iteration der Schleife Iteration Nicht erforderlich als die Länge des Arrays (2) wurde durchlaufen.