Bu konuda zaten çok güzel cevaplar var. Ancak ES5 bağlamında "nth element diziden kaldır" çözmeye çalıştığımda deneyimimi paylaşmak istedim.
JavaScript dizilerinin başlangıçtan veya bitişten öğe eklemek / kaldırmak için farklı yöntemleri vardır. Bunlar:
arr.push(ele) - To add element(s) at the end of the array
arr.unshift(ele) - To add element(s) at the beginning of the array
arr.pop() - To remove last element from the array
arr.shift() - To remove first element from the array
Esasen, yukarıdaki yöntemlerin hiçbiri doğrudan nth elemanı diziden çıkarmak için kullanılamaz.
Dikkat çeken bir gerçek, bunun, yineleme sırasında bir koleksiyon için n. Öğeyi kaldırmanın mümkün olduğu java yineleyicinin kullanımının aksine olmasıdır.
Bu temelde Array.splice
nth öğesinin kaldırılması için sadece bir dizi yöntemi ile bırakır (bu yöntemlerle de yapabileceğiniz başka şeyler vardır, ancak bu soru bağlamında öğelerin kaldırılmasına odaklanıyorum):
Array.splice(index,1) - removes the element at the index
Orijinal yanıttan kopyalanan kod (yorumlarla birlikte):
var arr = ["one", "two", "three", "four"];
var i = arr.length; //initialize counter to array length
while (i--) //decrement counter else it would run into IndexOutBounds exception
{
if (arr[i] === "four" || arr[i] === "two") {
//splice modifies the original array
arr.splice(i, 1); //never runs into IndexOutBounds exception
console.log("Element removed. arr: ");
} else {
console.log("Element not removed. arr: ");
}
console.log(arr);
}
Dikkate değer bir başka yöntem de Array.slice
. Ancak bu yöntemin dönüş türü kaldırılan öğelerdir. Ayrıca bu orijinal diziyi değiştirmez. Değiştirilmiş kod snippet'i aşağıdaki gibi:
var arr = ["one", "two", "three", "four"];
var i = arr.length; //initialize counter to array length
while (i--) //decrement counter
{
if (arr[i] === "four" || arr[i] === "two") {
console.log("Element removed. arr: ");
console.log(arr.slice(i, i + 1));
console.log("Original array: ");
console.log(arr);
}
}
Bunu söyledikten sonra, yine Array.slice
de aşağıda gösterildiği gibi nth öğeyi kaldırmak için kullanabiliriz . Ancak çok daha fazla kod (dolayısıyla verimsiz)
var arr = ["one", "two", "three", "four"];
var i = arr.length; //initialize counter to array length
while (i--) //decrement counter
{
if (arr[i] === "four" || arr[i] === "two") {
console.log("Array after removal of ith element: ");
arr = arr.slice(0, i).concat(arr.slice(i + 1));
console.log(arr);
}
}
Array.slice
Yöntem la redux à fonksiyonel programlamada immutability elde etmek son derece önemlidir