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!"}
]

slicefunción y un pequeñoforbucle?Respuestas:
Simplemente filtre por el predicado opuesto:
fuente
slicetampoco 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.lengthromperá 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
splicedebe 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
jQuerymapa como filtro.Quizás estés buscando la
$.grep()función:fuente
siftes 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