javascript - npm underscore
Eliminar un elemento de la matriz usando UnderscoreJS (9)
Digamos que tengo este código
var arr = [{id:1,name:''a''},{id:2,name:''b''},{id:3,name:''c''}];
y quiero eliminar el elemento con id = 3 de la matriz. ¿Hay alguna forma de hacerlo sin empalmar? Maye algo con guión bajo o algo así?
¡Gracias!
Puede usar Underscore .filter
var arr = [{
id: 1,
name: ''a''
}, {
id: 2,
name: ''b''
}, {
id: 3,
name: ''c''
}];
var filtered = _(arr).filter(function(item) {
return item.id !== 3
});
También se puede escribir como:
var filtered = arr.filter(function(item) {
return item.id !== 3
});
var filtered = _.filter(arr, function(item) {
return item.id !== 3
});
También puedes usar .reject
Puede utilizar el método de rechazo de subrayado, a continuación se devolverá una nueva matriz que no tendrá una matriz con una coincidencia particular
arr = _.reject(arr, function(objArr){ return objArr.id == 3; });
Simplemente usando JavaScript simple, esto ya ha sido respondido: eliminar objetos de la matriz por propiedad del objeto .
Usando underscore.js, puedes combinar .findWhere
con .findWhere
:
var arr = [{
id: 1,
name: ''a''
}, {
id: 2,
name: ''b''
}, {
id: 3,
name: ''c''
}];
//substract third
arr = _.without(arr, _.findWhere(arr, {
id: 3
}));
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
Aunque, como de todos modos está creando una nueva matriz en este caso, simplemente podría usar _.filter
o la función Array.prototype.filter
(tal como se muestra en la otra pregunta). Entonces solo iterarías sobre una matriz en lugar de dos veces como aquí.
Si desea modificar la matriz in situ , debe usar .splice
. Esto también se muestra en la otra pregunta y no parece proporcionar ninguna función útil para eso.
Solía probar este método
_.filter(data, function(d) { return d.name != ''a'' });
También podría haber mejores métodos como las soluciones anteriores proporcionadas por los usuarios
Tenga cuidado si está filtrando cadenas y buscando filtros que no distingan entre mayúsculas y minúsculas. _.without () distingue entre mayúsculas y minúsculas. También puede usar _.reject () como se muestra a continuación.
var arr = ["test","test1","test2"];
var filtered = _.filter(arr, function(arrItem) {
return arrItem.toLowerCase() !== "TEST".toLowerCase();
});
console.log(filtered);
// ["test1", "test2"]
var filtered1 = _.without(arr,"TEST");
console.log(filtered1);
// ["test", "test1", "test2"]
var filtered2 = _.reject(arr, function(arrItem){
return arrItem.toLowerCase() === "TEST".toLowerCase();
});
console.log(filtered2);
// ["test1", "test2"]
Underscore tiene un método .without perfecto para eliminar un elemento de una matriz, especialmente si tiene el objeto para eliminar.
Devuelve una copia de la matriz con todas las instancias de los valores eliminados.
_.without(["bob", "sam", "fred"], "sam");
=> ["bob", "fred"]
Funciona con objetos más complejos también.
var bob = { Name: "Bob", Age: 35 };
var sam = { Name: "Sam", Age: 19 };
var fred = { Name: "Fred", Age: 50 };
var people = [bob, sam, fred]
_.without(people, sam);
=> [{ Name: "Bob", Age: 35 }, { Name: "Fred", Age: 50 }];
Si no tiene el elemento para eliminar, solo una propiedad de él, puede usar _.findWhere
y luego _.without
.
Use .reject :
arr = _.reject(arr, function(d){ return d.id === 3; });
u otra forma práctica:
_.omit(arr, _.findWhere(arr, {id: 3}));
mis 2 centavos
arr.splice(_.findIndex(arr, { id: 3 }), 1);