W tym wątku jest już wiele wspaniałych odpowiedzi. Chciałem jednak podzielić się swoim doświadczeniem, gdy próbowałem rozwiązać „usunięcie n-tego elementu z tablicy” w kontekście ES5.
Macierze JavaScript mają różne metody dodawania / usuwania elementów od początku lub końca. To są:
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
Zasadniczo żadnej z powyższych metod nie można użyć bezpośrednio do usunięcia n-tego elementu z tablicy.
Faktem wartym odnotowania jest to, że kontrastuje to z iteratorem Java, w którym można iterować n-ty element kolekcji.
Zasadniczo pozostawia nam to tylko jedną metodę tablicową Array.splice
do wykonania usuwania n-tego elementu (są też inne rzeczy, które możesz zrobić z tymi metodami, ale w kontekście tego pytania skupiam się na usuwaniu elementów):
Array.splice(index,1) - removes the element at the index
Oto kod skopiowany z oryginalnej odpowiedzi (z komentarzami):
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);
}
Inną godną uwagi metodą jest Array.slice
. Jednak typem zwrotnym tej metody są usunięte elementy. Nie zmienia to również oryginalnej tablicy. Zmodyfikowano fragment kodu w następujący sposób:
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);
}
}
To powiedziawszy, nadal możemy użyć Array.slice
do usunięcia n-tego elementu, jak pokazano poniżej. Jest to jednak znacznie więcej kodu (stąd nieefektywne)
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
Metoda jest niezwykle ważne, aby osiągnąć niezmienność w programowaniu funkcjonalnym à la Redux