Angenommen, ich habe diesen Code
var arr = [{id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 3, name: 'c'}];
und ich möchte das Element mit id = 3 aus dem Array entfernen. Gibt es eine Möglichkeit, dies ohne Spleißen zu tun? Maye etwas mit Unterstrich oder so etwas?
Vielen Dank!
javascript
underscore.js
Climboid
quelle
quelle
Antworten:
Nur mit einfachem JavaScript wurde dies bereits beantwortet: Entfernen Sie Objekte aus dem Array nach Objekteigenschaft .
Mit Underscore.js, könnten Sie kombinieren
.findWhere
mit.without
:Da Sie in diesem Fall ohnehin ein neues Array erstellen, können Sie einfach
_.filter
die nativeArray.prototype.filter
Funktion verwenden (wie in der anderen Frage gezeigt). Dann würden Sie das Array nur einmal anstatt möglicherweise zweimal wie hier durchlaufen.Wenn Sie das Array ändern möchten an Ort und Stelle , müssen Sie verwenden
.splice
. Dies wird auch in der anderen Frage gezeigt und undescore scheint dafür keine nützliche Funktion zu bieten.quelle
_.reject
sieht hier nach einer besseren Auswahl aus.arr.pop()
Sie können Unterstrich verwenden
.filter
Kann auch geschrieben werden als:
Überprüfen Sie die Geige
Sie können auch verwenden
.reject
quelle
_()
erstellt einen Wrapper um die Sammlung, mit dem Sie Unterstrichmethoden aufrufen können.Unterstrich verwenden
_.reject()
:quelle
arr = _.reject(arr, d => d.id === 3 );
Unterstrich hat eine _without () -Methode, die sich perfekt zum Entfernen eines Elements aus einem Array eignet , insbesondere wenn Sie das zu entfernende Objekt haben.
Funktioniert auch mit komplexeren Objekten.
Wenn Sie das zu entfernende Element nicht haben, können Sie nur eine Eigenschaft davon verwenden
_.findWhere
und dann_.without
.quelle
{ Name: "Sam", Age: 19 }
ohne und nicht mit der Variablen sam übergeben, funktioniert dies nicht mehr. GeigeBitte seien Sie vorsichtig, wenn Sie Zeichenfolgen filtern und nach Filtern suchen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird. _.without () unterscheidet zwischen Groß- und Kleinschreibung. Sie können auch _.reject () wie unten gezeigt verwenden.
quelle
Andere Antworten erstellen eine neue Kopie des Arrays. Wenn Sie das Array an Ort und Stelle ändern möchten, können Sie Folgendes verwenden:
Dies setzt jedoch voraus, dass das Element immer im Array gefunden wird (denn wenn es nicht gefunden wird, wird das letzte Element trotzdem entfernt). Um sicher zu gehen, können Sie verwenden:
quelle
oder ein anderer praktischer Weg:
meine 2 Cent
quelle
object
und gibt ein zurückobject
. Daher ist es nicht sehr gut, dort zu arbeiten,Arrays
wo wirarray
nach dem Entfernen eines Elements möglicherweise eine Rückendeckung erwarten ._.without([1, 2, 1, 0, 3, 1, 4], 0, 1); => [2, 3, 4]
Die Verwendung kann die einfache JavaScript -
Array#filter
Methode wie folgt verwenden:Oder verwenden
Array#reduce
undArray#concat
Methoden wie diese:HINWEIS:
quelle
Ich habe diese Methode ausprobiert
Möglicherweise gibt es auch bessere Methoden wie die oben genannten Lösungen, die von Benutzern bereitgestellt werden
quelle
Mit underscore.js
Das Ergebnis ist ::
[{id:1name:'a'},{id:2,name:'c'}]
quelle
Sie können die Ablehnungsmethode von Underscore verwenden. Im Folgenden wird ein neues Array zurückgegeben, das kein Array mit einer bestimmten Übereinstimmung enthält
quelle