Ci sono già molte risposte meravigliose su questa discussione. Tuttavia, volevo condividere la mia esperienza quando ho cercato di risolvere "rimuovi l'ennesimo elemento dall'array" nel contesto ES5.
Le matrici JavaScript hanno metodi diversi per aggiungere / rimuovere elementi dall'inizio o dalla fine. Questi sono:
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
In sostanza, nessuno dei metodi precedenti può essere utilizzato direttamente per rimuovere l'ennesimo elemento dall'array.
Un fatto degno di nota è che questo è in contrasto con l'uso di java iterator, in cui è possibile rimuovere l'ennesimo elemento per una raccolta durante l'iterazione.
Questo in sostanza ci lascia con un solo metodo array Array.splice
per eseguire la rimozione dell'ennesimo elemento (ci sono altre cose che potresti fare anche con questi metodi, ma nel contesto di questa domanda mi sto concentrando sulla rimozione degli elementi):
Array.splice(index,1) - removes the element at the index
Ecco il codice copiato dalla risposta originale (con commenti):
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);
}
Un altro metodo degno di nota è Array.slice
. Tuttavia, il tipo restituito di questo metodo sono gli elementi rimossi. Inoltre, ciò non modifica l'array originale. Snippet di codice modificato come segue:
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);
}
}
Detto questo, possiamo ancora usare Array.slice
per rimuovere l'ennesimo elemento come mostrato di seguito. Tuttavia è molto più codice (quindi inefficiente)
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);
}
}
Il Array.slice
metodo è estremamente importante per ottenere l'immutabilità nella programmazione funzionale alla redux