Eliminar un objeto de una matriz con JavaScript

¿Cómo puedo eliminar un objeto de un array? Deseo eliminar el objeto que incluye el nombre Kristian de someArray. Por ejemplo:

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

Quiero conseguir:

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

Puedes utilizar varios métodos para eliminar elementos de una matriz:

//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 quieres eliminar un elemento en la posición x, utiliza

someArray.splice(x, 1);

O

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

Respuesta al comentario de @chill182: puedes eliminar uno o más elementos de un array utilizando Array.filter, o Array.splice combinado con Array.findIndex (ver MDN), por ejemplo

begin snippet: js hide: false console: true babel: false -->

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

Fin del fragmento;

Comentarios (8)

La solución limpia sería utilizar Array.filter:

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

El problema con esto es que no funciona en IE < 9. Sin embargo, se puede incluir código de una biblioteca de Javascript (por ejemplo, underscore.js) que implementa esto para cualquier navegador.

Comentarios (4)

Utilice la función de empalme en matrices. Especifique la posición del elemento inicial y la longitud de la subsecuencia que desea eliminar.

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