Eliminar elemento de matriz según la propiedad del objeto

Resuelto imperium2335 asked hace 11 años • 12 respuestas

Tengo una variedad de objetos como este:

var myArray = [
    {field: 'id', operator: 'eq', value: id}, 
    {field: 'cStatus', operator: 'eq', value: cStatus}, 
    {field: 'money', operator: 'eq', value: money}
];

¿Cómo elimino uno específico según su propiedad?

por ejemplo, ¿cómo eliminaría el objeto de matriz con 'dinero' como propiedad de campo?

imperium2335 avatar Mar 08 '13 13:03 imperium2335
Aceptado

Una posibilidad:

myArray = myArray.filter(function( obj ) {
    return obj.field !== 'money';
});

Tenga en cuenta que esto filtercrea una nueva matriz. Cualquier otra variable que haga referencia a la matriz original no obtendrá los datos filtrados aunque actualice su variable original myArraycon la nueva referencia. Úselo con precaución.

jAndy avatar Mar 08 '2013 06:03 jAndy

Repita la matriz y spliceelimine las que no desee. Para un uso más fácil, itere hacia atrás para no tener que tener en cuenta la naturaleza viva de la matriz:

for (var i = myArray.length - 1; i >= 0; --i) {
    if (myArray[i].field == "money") {
        myArray.splice(i,1);
    }
}
Niet the Dark Absol avatar Mar 08 '2013 06:03 Niet the Dark Absol

Supongamos que desea eliminar el segundo objeto por su propiedad de campo.

Con ES6 es tan fácil como esto.

myArray.splice(myArray.findIndex(item => item.field === "cStatus"), 1)
Peracek avatar Apr 06 '2018 09:04 Peracek

Puede usar findIndex de lodash para obtener el índice del elemento específico y luego unirlo.

myArray.splice(_.findIndex(myArray, function(item) {
    return item.value === 'money';
}), 1);

Actualizar

También puedes usar findIndex() de ES6

El método findIndex() devuelve el índice del primer elemento de la matriz que satisface la función de prueba proporcionada. De lo contrario, se devuelve -1.

const itemToRemoveIndex = myArray.findIndex(function(item) {
  return item.field === 'money';
});

// proceed to remove an item only if it exists.
if(itemToRemoveIndex !== -1){
  myArray.splice(itemToRemoveIndex, 1);
}
Sridhar avatar Aug 20 '2015 11:08 Sridhar