Es gibt bereits viele wundervolle Antworten auf diesen Thread. Ich wollte jedoch meine Erfahrungen teilen, als ich versuchte, "n-tes Element aus Array entfernen" im ES5-Kontext zu lösen.
JavaScript-Arrays verfügen über verschiedene Methoden zum Hinzufügen / Entfernen von Elementen vom Anfang oder Ende. Diese sind:
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
Im Wesentlichen kann keine der oben genannten Methoden direkt verwendet werden, um das n-te Element aus dem Array zu entfernen.
Bemerkenswert ist, dass dies im Gegensatz zu Java-Iteratoren steht, mit denen das n-te Element für eine Sammlung während der Iteration entfernt werden kann.
Dies lässt uns im Grunde nur eine Array-Methode Array.splice
zum Entfernen des n-ten Elements übrig (es gibt andere Dinge, die Sie auch mit diesen Methoden tun könnten, aber im Zusammenhang mit dieser Frage konzentriere ich mich auf das Entfernen von Elementen):
Array.splice(index,1) - removes the element at the index
Hier ist der Code, der von der ursprünglichen Antwort (mit Kommentaren) kopiert wurde:
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);
}
Eine andere bemerkenswerte Methode ist Array.slice
. Der Rückgabetyp dieser Methode sind jedoch die entfernten Elemente. Auch dies ändert das ursprüngliche Array nicht. Geändertes Code-Snippet wie folgt:
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);
}
}
Trotzdem können wir das Array.slice
n-te Element wie unten gezeigt entfernen. Es ist jedoch viel mehr Code (daher ineffizient)
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);
}
}
Die Array.slice
Methode ist äußerst wichtig, um Unveränderlichkeit bei der funktionalen Programmierung à la Redux zu erreichen