Object uit array verwijderen met JavaScript

Hoe kan ik een object uit een array verwijderen? Ik wil het object met de naam Kristian uit someArray verwijderen. Bijvoorbeeld:

someArray = [{name:"Kristian", lines:"2,5,10"},
             {name:"John", lines:"1,19,26,96"}];

Ik wil bereiken:

someArray = [{name:"John", lines:"1,19,26,96"}];
Oplossing

Je kunt verschillende methoden gebruiken om item(s) uit een Array te verwijderen:

//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

Als je een element op positie x wilt verwijderen, gebruik dan:

someArray.splice(x, 1);

Of

someArray = someArray.slice(0, x).concat(someArray.slice(-x));

Antwoord op de opmerking van @chill182: je kunt een of meer elementen uit een array verwijderen met Array.filter, of Array.splice in combinatie met Array.findIndex (zie MDN), bijv.

// 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>
Commentaren (8)

De nette oplossing zou zijn om Array.filter te gebruiken:

var filtered = someArray.filter(function(el) { return el.Name != "Kristian"; }); 

Het probleem hiermee is dat het niet werkt op IE < 9. Je kunt echter code van een Javascript bibliotheek (b.v. underscore.js) die dit implementeert voor elke browser.

Commentaren (4)

Gebruik de splice functie op arrays. Specificeer de positie van het beginelement en de lengte van de subsequentie die je wilt verwijderen.

someArray.splice(pos, 1);
Commentaren (0)