Comment supprimer un objet d'un tableau ?
Je souhaite supprimer l'objet qui comprend le nom Kristian
de someArray
. Par exemple :
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
Je veux obtenir:
someArray = [{name:"John", lines:"1,19,26,96"}];
Vous pouvez utiliser plusieurs méthodes pour supprimer un ou plusieurs éléments d'un tableau :
//1
someArray.shift(); // first element removed
//2
someArray = someArray.slice(1); // first element removed
//3
someArray.splice(0, 1); // first element removed
//4
someArray.pop(); // last element removed
//5
someArray = someArray.slice(0, a.length - 1); // last element removed
//6
someArray.length = someArray.length - 1; // last element removed
Si vous voulez supprimer l'élément à la position x
, utilisez :
someArray.splice(x, 1);
Ou
someArray = someArray.slice(0, x).concat(someArray.slice(-x));
Réponse au commentaire de [@chill182][1] : vous pouvez supprimer un ou plusieurs éléments d'un tableau en utilisant Array.filter
, ou Array.splice
combiné à Array.findIndex
(voir [MDN][2]), par ex.
// non destructive filter > noJohn = John removed, but someArray will not change
let someArray = getArray();
let noJohn = someArray.filter( el => el.name !== "John" );
log("non destructive filter > noJohn = ", format(noJohn));
log(`**someArray.length ${someArray.length}`);
// destructive filter/reassign John removed > someArray2 =
let someArray2 = getArray();
someArray2 = someArray2.filter( el => el.name !== "John" );
log("", "destructive filter/reassign John removed > someArray2 =",
format(someArray2));
log(`**someArray2.length ${someArray2.length}`);
// destructive splice /w findIndex Brian remains > someArray3 =
let someArray3 = getArray();
someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1);
someArray3.splice(someArray3.findIndex(v => v.name === "John"), 1);
log("", "destructive splice /w findIndex Brian remains > someArray3 =",
format(someArray3));
log(`**someArray3.length ${someArray3.length}`);
function format(obj) {
return JSON.stringify(obj, null, " ");
}
function log(...txt) {
document.querySelector("pre").textContent += `${txt.join("\n")}\n`
}
function getArray() {
return [ {name: "Kristian", lines: "2,5,10"},
{name: "John", lines: "1,19,26,96"},
{name: "Brian", lines: "3,9,62,36"} ];
}
<pre>
**Results**
</pre>
[1] : https://stackoverflow.com/users/995721/chill182 [2] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
La solution propre serait d'utiliser [Array.filter
][1] :
var filtered = someArray.filter(function(el) { return el.Name != "Kristian"; });
Le problème est qu'il [ne fonctionne pas][2] sur IE < 9. Cependant, vous pouvez inclure du code provenant d'une bibliothèque Javascript (par exemple [underscore.js][3]) qui implémente cette solution pour tous les navigateurs.
[1] : https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter [2] : http://kangax.github.com/es5-compat-table/ [3] : http://documentcloud.github.com/underscore/#filter