Array nesnesi yöntemleriyle, Array içeriğini döngülerin temeline kıyasla henüz değiştirebilirsiniz, bu yöntemlerde önemli bir işlevsellik yoktur. Çalışma sırasında dizini değiştiremezsiniz.
Örneğin, geçerli öğeyi kaldırır ve aynı dizi içindeki başka bir dizin konumuna yerleştirirseniz, bunu kolayca yapabilirsiniz. Geçerli öğeyi önceki bir konuma taşırsanız, bir sonraki yinelemede sorun olmazsa, bir şey yapmamışsınız gibi bir sonraki öğeyi alırsınız.
İndeks 5'e kadar sayıldığında, indeks konumu 5'teki öğeyi indeks konumu 2'ye taşıdığımız bu kodu düşünün.
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
Ancak, geçerli öğeyi geçerli dizin konumunun ötesinde bir yere taşırsak, işler biraz dağınık hale gelir. Ardından, sonraki öğe taşınan öğeler konumuna geçer ve sonraki yinelemede onu göremez veya değerlendiremeyiz.
İndeks 5'e kadar sayıldığında, indeks pozisyonu 5'teki öğeyi indeks pozisyonu 7'ye taşıdığımız bu kodu düşünün.
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
Bu yüzden döngüde 6 ile hiç tanışmadık. Normalde for döngüsünde, dizi öğesini ileri taşıdığınızda dizin değerini azaltmanız beklenir, böylece dizininiz bir sonraki çalıştırmada aynı konumda kalır ve kaldırılan öğenin yerine kaydırılan öğeyi yine de değerlendirebilirsiniz. Dizi yöntemleri ile bu mümkün değildir. Dizini değiştiremezsiniz. Aşağıdaki kodu kontrol edin
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
Ne zaman azaldığımızı gördüğünüz gibi i
, 5'ten 6'ya, kaldığı yerden devam etmeyecek.
Bunu aklınızda bulundurun.