He estado intentando varios enfoques sobre cómo encontrar un objeto en una matriz, donde ID = var, y si se encuentra, elimine el objeto de la matriz y devuelva la nueva matriz de objetos.
Datos:
[
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
Puedo buscar la matriz usando jQuery $ grep;
var id = 88;
var result = $.grep(data, function(e){
return e.id == id;
});
Pero, ¿cómo puedo eliminar todo el objeto cuando id == 88, y devolver datos como este:
Datos:
[
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
slice
función y un pequeñofor
bucle?Respuestas:
Simplemente filtre por el predicado opuesto:
fuente
slice
tampoco elimina nada. No estoy seguro de a qué te refieres. Si tiene un problema específico usted mismo, es posible que desee hacer una nueva pregunta .data.filter(e => !ids.includes(e.id))
Aquí hay una solución si no está utilizando jquery:
fuente
findIndex()
y luegosplice(index, 1)
en la matriz principal?arr = arr.filter( obj => obj.id !== id);
Puede simplificar esto, y realmente no hay necesidad de usar jquery aquí.
Simplemente recorra la lista, encuentre la identificación correspondiente, empalme y luego rompa para salir de su ciclo
fuente
i=data.length; i > 0; i--
realice un bucle en orden inverso con y no lo usebreak
.i = data.length
romperá cualquieradata[i]
, debería ser algo asíi=data.length -1 ; i > -1; i--
Hay un nuevo método para hacer esto en ES6 / 2015 utilizando findIndex y el operador de distribución de matriz:
Puede convertirlo en una función para su posterior reutilización como esta:
De esta manera, puede eliminar elementos mediante diferentes claves utilizando un método (y si no hay ningún objeto que cumpla con los criterios, obtendrá la matriz original devuelta):
O puede ponerlo en su Array.prototype:
Y úsalo de esta manera:
fuente
Asumir que los identificadores son únicos y que solo tendrá que eliminar el elemento
splice
debe hacer el truco:fuente
each(data,function(idx,ele)
. Te facturaré más tarde por los 30 minutos que desperdicié resolviendo eso :)Si está utilizando jQuery, use jQuery.grep así:
Usando ES5 Array.prototype.filter :
fuente
jQuery
mapa como filtro.Quizás estés buscando la
$.grep()
función:fuente
sift
es un potente filtro de recopilación para operaciones como esta y otras mucho más avanzadas. Funciona del lado del cliente en el navegador o del lado del servidor en node.js.Es compatible con filtros como
$in
,$nin
,$exists
,$gte
,$gt
,$lte
,$lt
,$eq
,$ne
,$mod
,$all
,$and
,$or
,$nor
,$not
,$size
,$type
, y$regex
, y se esfuerza por ser con filtrado colección MongoDB compatibles API.fuente
Esto debería hacer el truco, jsfiddle
fuente
Asegúrese de forzar la identificación del objeto a un entero si prueba la igualdad estricta:
Manifestación
fuente
Si está utilizando subrayado js, es fácil eliminar el objeto según la clave. http://underscorejs.org . Ejemplo:
fuente