¿Cómo puedo eliminar un objeto de una matriz? Deseo eliminar el objeto que incluye el nombre Kristian
de someArray
. Por ejemplo:
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
Quiero lograr:
someArray = [{name:"John", lines:"1,19,26,96"}];
javascript
arrays
Ayunarse
fuente
fuente
Respuestas:
Puede usar varios métodos para eliminar elementos de una matriz:
Si desea eliminar el elemento en la posición
x
, use:O
Responda al comentario de @ chill182 : puede eliminar uno o más elementos de una matriz utilizando
Array.filter
oArray.splice
combinados conArray.findIndex
(consulte MDN ), por ejemplofuente
findIndex
resultado antes de usarlosplice
. Si no hay elementos en la matriz que coincidan, la condiciónfindIndex
volverá-1
y colocar esto directamentesplice
dará como resultado una eliminación arbitraria del último elemento en la matriz.Recomiendo usar lodash.js o sugar.js para tareas comunes como esta:
En la mayoría de los proyectos, es bastante útil tener un conjunto de métodos auxiliares proporcionados por bibliotecas como estas.
fuente
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });
someArray = someArray.filter(function(e) { return e.Name !== "Kristian"; });
La solución limpia sería usar
Array.filter
:El problema con esto es que no funciona en IE <9. Sin embargo, puede incluir código de una biblioteca de Javascript (por ejemplo, subrayado.js ) que implementa esto para cualquier navegador.
fuente
someArray = someArray.filter(function(el) { return el.Name != "Kristian"; });
direcciones que, ¿no?¿Qué tal esto?
fuente
$.each()
almacena en caché la longitud de la matriz antes de hacer un bucle, por lo que si elimina un elemento$.each()
se ejecutará más allá del final de la matriz (ahora más corta). (EntoncessomeArray[i]
seráundefined
yundefined.name
se estrellará).Su "matriz" como se muestra es una sintaxis JavaScript no válida. Los corchetes
{}
son para objetos con pares de nombre / valor de propiedad, pero los corchetes[]
son para matrices, así:En ese caso, puede usar el
.splice()
método para eliminar un elemento. Para eliminar el primer elemento (índice 0), diga:Si no conoce el índice pero desea buscar en la matriz para encontrar el elemento con el nombre "Kristian" para eliminarlo, puede hacerlo:
EDITAR: Acabo de notar que su pregunta está etiquetada con "jQuery", por lo que puede probar el
$.grep()
método :fuente
$.grep()
? No agrega mucho en este ejemplo, donde sí, podría haberlo puesto!=
, pero en otros casos es posible que ya tenga una función definida que haga la prueba opuesta a lo que desea grep, así que en lugar de definir un función adicional, puede usar esa sobrecarga para invertir los resultados.function isEven(num) { return num%2===0 }
. Puede usar$.grep(someArray, isEven)
para obtener solo los números pares de la matriz, o$.grep(someArray, isEven, true)
hacer lo contrario y obtener los valores no pares.ES2015
¡Eliminará a John !
fuente
Podrías usar array.filter ().
p.ej
Funciones de flecha:
fuente
He realizado una función dinámica que toma los objetos Matriz, Clave y valor y devuelve la misma matriz después de eliminar el objeto deseado:
Ejemplo completo: DEMO
fuente
Esta es una función que me funciona:
fuente
También podrías intentar hacer algo como esto:
fuente
fuente
Utilice la función de empalme en matrices. Especifique la posición del elemento de inicio y la longitud de la subsecuencia que desea eliminar.
fuente
Vote por UndercoreJS para un trabajo simple con matrices.
La función _.without () ayuda a eliminar un elemento:
fuente
Con función de flecha ES 6
fuente
La solución más simple sería crear un mapa que almacene los índices para cada objeto por nombre, de esta manera:
fuente
Aunque esto probablemente no sea tan apropiado para esta situación, descubrí el otro día que también puede usar la
delete
palabra clave para eliminar un elemento de una matriz si no necesita alterar el tamaño de la matriz, por ejemplofuente
Esta respuesta
no funciona para múltiples registros que cumplan la condición. Si tiene dos de estos registros consecutivos, solo se eliminará el primero y se saltará el otro. Tienes que usar:
en su lugar
fuente
Parece que hay un error en la sintaxis de su matriz, por lo que suponiendo que se refiere a una matriz en lugar de un objeto, Array.splice es su amigo aquí:
fuente
Puede usar la función de mapa también.
fuente
También puedes usar
some
:fuente
Esto es lo que yo uso.
Entonces es tan simple como decir
Reemplace cualquier número en lugar de tres. Después de la salida esperada debe ser:
fuente
Si desea eliminar todas las apariciones de un objeto determinado (basado en alguna condición), utilice el método de empalme de JavaScript dentro de a para el bucle.
Dado que la eliminación de un objeto afectaría la longitud de la matriz, asegúrese de disminuir el contador un paso, para que la verificación de longitud permanezca intacta.
El fragmento de código anterior elimina todos los objetos con una edad superior a 20.
fuente
Use la función splice () de javascript.
Esto puede ayudar: http://www.w3schools.com/jsref/jsref_splice.asp
fuente
El empalme (i, 1) donde i es el índice incremental de la matriz eliminará el objeto. Pero recuerde que el empalme también restablecerá la longitud de la matriz, así que tenga cuidado con 'indefinido'. Usando su ejemplo, si elimina 'Kristian', en la próxima ejecución dentro del ciclo, seré 2 pero someArray tendrá una longitud de 1, por lo tanto, si intenta eliminar "John" obtendrá un error "indefinido" . Una solución a esto, aunque no elegante, es tener un contador separado para realizar un seguimiento del índice del elemento que se va a eliminar.
fuente
Devuelve solo objetos de la matriz cuya propiedad
name
no es "Kristian"Manifestación:
fuente
Estos conceptos usando Kendo Grid
fuente
Supongo que las respuestas son muy ramificadas y anudadas.
Puede usar la siguiente ruta para eliminar un objeto de matriz que coincida con el objeto dado en la jerga moderna de JavaScript.
fuente
Si desea acceder y eliminar el objeto de una matriz, simplemente puede intentar algo como esto.
fuente