Mit den Array-Objektmethoden können Sie den Array-Inhalt ändern, aber im Vergleich zu den grundlegenden for-Schleifen fehlt diesen Methoden eine wichtige Funktionalität. Sie können den Index während des Laufs nicht ändern.
Wenn Sie beispielsweise das aktuelle Element entfernen und an einer anderen Indexposition innerhalb desselben Arrays platzieren, können Sie dies problemlos tun. Wenn Sie das aktuelle Element an eine vorherige Position verschieben, gibt es in der nächsten Iteration kein Problem. Sie erhalten das gleiche nächste Element, als hätten Sie nichts getan.
Betrachten Sie diesen Code, in dem wir das Element an Indexposition 5 auf Indexposition 2 verschieben, sobald der Index bis zu 5 zählt.
var ar = [0,1,2,3,4,5,6,7,8,9];
ar.forEach((e,i,a) => {
i == 5 && a.splice(2,0,a.splice(i,1)[0])
console.log(i,e);
}); // 0 0 - 1 1 - 2 2 - 3 3 - 4 4 - 5 5 - 6 6 - 7 7 - 8 8 - 9 9
Wenn wir das aktuelle Element jedoch an einen Ort jenseits der aktuellen Indexposition verschieben, wird es etwas chaotisch. Dann verschiebt sich das nächste Element in die Position der verschobenen Elemente und in der nächsten Iteration können wir es nicht sehen oder bewerten.
Betrachten Sie diesen Code, in dem wir das Element an Indexposition 5 auf Indexposition 7 verschieben, sobald der Index bis zu 5 zählt.
var a = [0,1,2,3,4,5,6,7,8,9];
a.forEach((e,i,a) => {
i == 5 && a.splice(7,0,a.splice(i,1)[0])
console.log(i,e);
}); // 0 0 - 1 1 - 2 2 - 3 3 - 4 4 - 5 5 - 6 7 - 7 5 - 8 8 - 9 9
Wir haben also noch nie 6 in der Schleife getroffen. Normalerweise wird in einer for-Schleife erwartet, dass Sie den Indexwert verringern, wenn Sie das Array-Element nach vorne verschieben, sodass Ihr Index im nächsten Durchlauf an derselben Position bleibt und Sie das an der Stelle des entfernten Elements verschobene Element weiterhin auswerten können. Dies ist mit Array-Methoden nicht möglich. Sie können den Index nicht ändern. Überprüfen Sie den folgenden Code
var a = [0,1,2,3,4,5,6,7,8,9];
a.forEach((e,i,a) => {
i == 5 && (a.splice(7,0,a.splice(i,1)[0]), i--);
console.log(i,e);
}); // 0 0 - 1 1 - 2 2 - 3 3 - 4 4 - 4 5 - 6 7 - 7 5 - 8 8 - 9 9
Wie Sie sehen, wird es beim Dekrementieren i
nicht von 5 auf 6 fortgesetzt, von wo es übrig geblieben ist.
Denken Sie also daran.