Ana amacınızın bunun olmasına neden olan süreci anlamak olduğunu görüyorum, bu sizin için sorunu göstermelidir:
var arr = ["one", "two", "three", "four", "five", "six"];
for(var i = 0; i < arr.length; i++){
console.log("i is " + i + ", so we are removing \"" + arr[i] + "\" from " + JSON.stringify(arr) + ".");
arr.splice(i, 1);
console.log("After that removal, the array is " + JSON.stringify(arr) + ". We'll now iterate i to " + (i + 1) + " and continue the loop.");
}
console.log("i is too high to grab a value from the array, so we're finished. We're left with " + JSON.stringify(arr) + ".");
Bu döngü, "for .. of" döngünüzün nihai sonuçta ekstralar bırakması için geçtiği işlemle aynı türden geçer. Sorun şu ki, kendi endekslerini aralarından geçerken yok ediyor, böylece igerçekten atıfta bulunulan değeri değiştiriyor . Bu sorunla karşı karşıya olduğumda, diziyi geriye doğru döngüye sokmayı seviyorum, böylece kendi yıkımdan etkilenmem, şöyle:
var arr = ["one", "two", "three", "four", "five", "six"];
for(var i = arr.length - 1; i >= 0; i--){
console.log("i is " + i + ", so we are removing \"" + arr[i] + "\" from " + JSON.stringify(arr) + ".");
arr.splice(i, 1);
console.log("After that removal, the array is " + JSON.stringify(arr) + ". We'll now iterate i to " + (i - 1) + " and continue the loop.");
}
console.log("i is too low to grab a value from the array, so we're finished. We're left with " + JSON.stringify(arr) + ".");
Umarım bu, burada neler olup bittiğini iyice anlamanıza yardımcı olur. Herhangi bir sorunuz varsa, bana bir yorum bırakmaktan çekinmeyin.
.optionsOlduğu değil sorunun kaynağı olan bir dizi, - daha doğrusu, canlı bir HTMLCollection, bu. Bir dizi olsaydı, statik olurdu ve herhangi bir sorun olmazdı.