Digamos que tengo este código
var arr = [{id: 1, nombre: 'a'}, {id: 2, nombre: 'b'}, {id: 3, nombre: 'c'}];
y quiero eliminar el elemento con id = 3 de la matriz. ¿Hay alguna manera de hacer esto sin empalmar? ¿Puedes usar algo de subrayado o algo así?
¡Gracias!
javascript
underscore.js
climboid
fuente
fuente
Respuestas:
Simplemente usando JavaScript simple, esto ya ha sido respondido: eliminar objetos de la matriz por propiedad del objeto .
Usando underscore.js, puede combinar
.findWhere
con.without
:Sin embargo, dado que de todos modos está creando una nueva matriz en este caso, simplemente puede usar
_.filter
laArray.prototype.filter
función nativa (tal como se muestra en la otra pregunta). Entonces solo iteraría sobre la matriz una vez en lugar de potencialmente dos veces como aquí.Si desea modificar la matriz en el lugar , debe usarla
.splice
. Esto también se muestra en la otra pregunta y la anulación de puntaje no parece proporcionar ninguna función útil para eso.fuente
_.reject
Parece una mejor selección aquí.arr.pop()
...Puedes usar el subrayado
.filter
También se puede escribir como:
Comprobar violín
También puedes usar
.reject
fuente
_()
creará un contenedor alrededor de la colección que le permitirá invocar métodos de subrayado.Usar subrayado
_.reject()
:fuente
arr = _.reject(arr, d => d.id === 3 );
El subrayado tiene un método _without () perfecto para eliminar un elemento de una matriz, especialmente si tiene el objeto para eliminar.
Funciona también con objetos más complejos.
Si no tiene el elemento para eliminar, solo una propiedad del mismo, puede usarlo
_.findWhere
y luego_.without
.fuente
{ Name: "Sam", Age: 19 }
a sin, en lugar de la variable sam, ya no funciona. FiddleTenga 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.
fuente
Otras respuestas crean una nueva copia de la matriz, si desea modificar la matriz en su lugar puede usar:
Pero eso supone que el elemento siempre se encontrará dentro de la matriz (porque si no se encuentra, eliminará el último elemento). Para estar seguro, puede usar:
fuente
u otra forma práctica:
mis 2 centavos
fuente
object
y devuelve unobject
. por lo tanto, no es muy bueno para trabajarArrays
donde podríamos esperar obtener unaarray
copia de seguridad después de eliminar un elemento._.without([1, 2, 1, 0, 3, 1, 4], 0, 1); => [2, 3, 4]
Use puede usar el método de JavaScript simple
Array#filter
como este:O, use
Array#reduce
yArray#concat
métodos como este:NOTA:
fuente
Solía probar este método
También puede haber mejores métodos, como las soluciones anteriores proporcionadas por los usuarios.
fuente
Mediante el uso de underscore.js
El resultado será ::
[{id:1name:'a'},{id:2,name:'c'}]
fuente
Puede usar el método de rechazo de subrayado, a continuación devolverá una nueva matriz que no tendrá una matriz con una coincidencia particular
fuente