Metodami obiektowymi Array można modyfikować zawartość Array, ale w porównaniu z podstawowymi pętlami for, metody te nie mają jednej ważnej funkcji. Nie można modyfikować indeksu w biegu.
Na przykład, jeśli usuniesz bieżący element i umieścisz go w innej pozycji indeksu w tej samej tablicy, możesz to łatwo zrobić. Jeśli przeniesiesz bieżący element do poprzedniej pozycji, w następnej iteracji nie będzie problemu, otrzymasz ten sam następny element, jakbyś nic nie zrobił.
Rozważ ten kod, w którym przesuwamy element z pozycji indeksu 5 do pozycji indeksu 2, gdy indeks policzy do 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
Jeśli jednak przeniesiemy bieżący element do miejsca poza bieżącą pozycją indeksu, sytuacja stanie się nieco nieuporządkowana. Następnie następny element przesunie się do pozycji przeniesionych elementów, a podczas następnej iteracji nie będziemy w stanie go zobaczyć ani ocenić.
Rozważ ten kod, w którym przesuwamy element z pozycji indeksu 5 do pozycji indeksu 7, gdy indeks policzy do 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
Więc nigdy nie spotkaliśmy 6 w pętli. Zwykle w pętli for oczekuje się zmniejszenia wartości indeksu podczas przesuwania elementu tablicy do przodu, tak aby indeks pozostał na tej samej pozycji w następnym uruchomieniu i nadal można ocenić element przesunięty na miejsce usuniętego elementu. Nie jest to możliwe w przypadku metod tablicowych. Nie możesz zmienić indeksu. Sprawdź następujący kod
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
Jak widać, kiedy zmniejszamy, i
nie będzie kontynuowane od 5, ale od 6, od miejsca, w którym zostało.
Miej to na uwadze.