Il y a déjà beaucoup de réponses merveilleuses sur ce fil. Cependant, je voulais partager mon expérience lorsque j'ai essayé de résoudre "supprimer le nième élément du tableau" dans le contexte ES5.
Les tableaux JavaScript ont différentes méthodes pour ajouter / supprimer des éléments du début ou de la fin. Ceux-ci sont:
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
Essentiellement, aucune des méthodes ci-dessus ne peut être utilisée directement pour supprimer le nième élément du tableau.
Un fait intéressant à noter est que cela contraste avec l'utilisation de l'itérateur java qui permet de supprimer le nième élément d'une collection pendant l'itération.
Cela nous laisse essentiellement avec une seule méthode de tableau Array.splice
pour effectuer la suppression du nième élément (il y a d'autres choses que vous pourriez faire avec ces méthodes également, mais dans le contexte de cette question, je me concentre sur la suppression des éléments):
Array.splice(index,1) - removes the element at the index
Voici le code copié de la réponse originale (avec commentaires):
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);
}
Une autre méthode remarquable est Array.slice
. Cependant, le type de retour de cette méthode est les éléments supprimés. Cela ne modifie pas non plus le tableau d'origine. Extrait de code modifié comme suit:
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);
}
}
Cela dit, nous pouvons toujours utiliser Array.slice
pour supprimer le nième élément comme indiqué ci-dessous. Cependant c'est beaucoup plus de code (donc inefficace)
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);
}
}
La Array.slice
méthode est extrêmement importante pour atteindre l'immuabilité dans la programmation fonctionnelle à la redux