Eliminar elemento de matriz según la propiedad del objeto
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?
Una posibilidad:
myArray = myArray.filter(function( obj ) {
return obj.field !== 'money';
});
Tenga en cuenta que esto filter
crea una nueva matriz. Cualquier otra variable que haga referencia a la matriz original no obtendrá los datos filtrados aunque actualice su variable original myArray
con la nueva referencia. Úselo con precaución.
Repita la matriz y splice
elimine 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);
}
}
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)
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);
}