underscore javascript underscore.js

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 });

Compruebe Fiddle

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);