Ich habe verschiedene Ansätze versucht, um ein Objekt in einem Array zu finden, wobei ID = var. Wenn es gefunden wird, entfernen Sie das Objekt aus dem Array und geben Sie das neue Array von Objekten zurück.
Daten:
[
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
Ich kann das Array mit jQuery $ grep durchsuchen.
var id = 88;
var result = $.grep(data, function(e){
return e.id == id;
});
Aber wie kann ich das gesamte Objekt löschen, wenn id == 88, und Daten wie folgt zurückgeben:
Daten:
[
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
slice
Funktion und einer kleinenfor
Schleife?Antworten:
Filtern Sie einfach nach dem entgegengesetzten Prädikat:
quelle
slice
entfernt auch nichts. Ich bin mir nicht sicher, worauf du hinaus willst. Wenn Sie selbst ein bestimmtes Problem haben, möchten Sie möglicherweise eine neue Frage stellen .data.filter(e => !ids.includes(e.id))
Hier ist eine Lösung, wenn Sie jquery nicht verwenden:
quelle
findIndex()
und dannsplice(index, 1)
auf dem übergeordneten Array?arr = arr.filter( obj => obj.id !== id);
Sie können dies vereinfachen, und es besteht hier wirklich keine Notwendigkeit, jquery zu verwenden.
Durchlaufen Sie einfach die Liste, suchen Sie die passende ID, spleißen Sie und brechen Sie dann ab, um Ihre Schleife zu verlassen
quelle
i=data.length; i > 0; i--
und verwenden Sie sie nichtbreak
.i = data.length
wird brechendata[i]
, sollte es so etwas wie seini=data.length -1 ; i > -1; i--
Es gibt eine neue Methode, um dies in ES6 / 2015 mit findIndex und dem Array-Spread-Operator zu tun:
Sie können daraus eine Funktion für die spätere Wiederverwendung machen:
Auf diese Weise können Sie Elemente mit einer Methode mit verschiedenen Schlüsseln entfernen (und wenn kein Objekt vorhanden ist, das die Kriterien erfüllt, wird das ursprüngliche Array zurückgegeben):
Oder Sie können es auf Ihren Array.prototype setzen:
Und benutze es so:
quelle
Unter der Annahme , dass IDs ist einzigartig und Sie werden nur das ein Element zu entfernen,
splice
sollte es tun:quelle
each(data,function(idx,ele)
. Ich werde dir später die 30 Minuten in Rechnung stellen, die ich damit verbracht habe, das herauszufinden :)Wenn Sie jQuery verwenden, verwenden Sie jQuery.grep wie folgt :
Verwenden von ES5 Array.prototype.filter :
quelle
jQuery
Karte nicht als Filter.Vielleicht suchen Sie nach
$.grep()
Funktion:quelle
sift
ist ein leistungsstarker Sammlungsfilter für Operationen wie diese und viel fortgeschrittenere. Es funktioniert clientseitig im Browser oder serverseitig in node.js.Es unterstützt Filter wie
$in
,$nin
,$exists
,$gte
,$gt
,$lte
,$lt
,$eq
,$ne
,$mod
,$all
,$and
,$or
,$nor
,$not
,$size
,$type
, und$regex
, und ist bestrebt , API-kompatibel mit MongoDB Sammlung Filterung zu sein.quelle
Dies sollte den Trick machen, jsfiddle
quelle
Stellen Sie sicher, dass Sie die Objekt-ID in eine Ganzzahl zwingen, wenn Sie auf strikte Gleichheit prüfen:
Demo
quelle
Wenn Sie js mit Unterstrich verwenden, ist es einfach, Objekte basierend auf dem Schlüssel zu entfernen. http://underscorejs.org . Beispiel:
quelle