Con i metodi degli oggetti Array è possibile modificare il contenuto dell'array ma confrontato con i loop di base, questi metodi mancano di un'importante funzionalità. Non è possibile modificare l'indice in fuga.
Ad esempio, se si rimuove l'elemento corrente e lo si posiziona in un'altra posizione di indice all'interno dello stesso array, è possibile farlo facilmente. Se sposti l'elemento corrente in una posizione precedente non ci sono problemi nella prossima iterazione otterrai lo stesso oggetto successivo come se non avessi fatto nulla.
Considera questo codice in cui spostiamo l'elemento nella posizione di indice 5 nella posizione di indice 2 una volta che l'indice conta fino a 5.
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
Tuttavia, se spostiamo l'elemento corrente da qualche parte oltre l'attuale posizione dell'indice, le cose diventano un po 'confuse. Quindi l'elemento successivo si sposterà nella posizione degli oggetti spostati e nella successiva iterazione non saremo in grado di vederlo o valutarlo.
Considera questo codice in cui spostiamo l'elemento nella posizione di indice 5 nella posizione di indice 7 una volta che l'indice conta fino a 5.
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
Quindi non abbiamo mai incontrato 6 nel ciclo. Normalmente in un ciclo for ci si aspetta che diminuisca il valore dell'indice quando si sposta l'elemento dell'array in avanti in modo che l'indice rimanga nella stessa posizione nella corsa successiva e sia ancora possibile valutare l'elemento spostato nella posizione dell'elemento rimosso. Questo non è possibile con i metodi array. Non è possibile modificare l'indice. Controlla il seguente codice
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
Come vedi quando diminuiamo i
, non continuerà da 5 ma 6, da dove era rimasto.
Quindi tienilo a mente.