Wie kann ich ein Objekt aus einem Array entfernen? Ich möchte das Objekt entfernen, den Namen enthält Kristian
aus someArray
. Zum Beispiel:
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
Ich möchte erreichen:
someArray = [{name:"John", lines:"1,19,26,96"}];
javascript
arrays
Clem
quelle
quelle
Antworten:
Sie können verschiedene Methoden verwenden, um Elemente aus einem Array zu entfernen:
Wenn Sie das Element an der Position entfernen möchten
x
, verwenden Sie:Oder
Antwort auf den Kommentar von @ chill182 : Sie können ein oder mehrere Elemente aus einem Array entfernen
Array.filter
oderArray.splice
mitArray.findIndex
(siehe MDN ) kombinieren , zquelle
findIndex
Ergebnis überprüfen, bevor Sie es verwendensplice
. Wenn das Array keine Elemente enthält, die mit der Bedingung übereinstimmen,findIndex
wird dies zurückgegeben,-1
und wenn Sie dies direkt eingeben,splice
wird das letzte Element im Array durch Arbitraty gelöscht.Ich empfehle die Verwendung von lodash.js oder Sugar.js für allgemeine Aufgaben wie diese:
In den meisten Projekten ist es sehr nützlich, eine Reihe von Hilfsmethoden zu haben, die von solchen Bibliotheken bereitgestellt werden.
quelle
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });
someArray = someArray.filter(function(e) { return e.Name !== "Kristian"; });
Die saubere Lösung wäre zu verwenden
Array.filter
:Das Problem dabei ist, dass es unter IE <9 nicht funktioniert. Sie können jedoch Code aus einer Javascript-Bibliothek (z. B. underscore.js ) einfügen , der dies für jeden Browser implementiert.
quelle
someArray = someArray.filter(function(el) { return el.Name != "Kristian"; });
Adressen, die, nein?Wie wäre es damit?
quelle
$.each()
die Array-Länge vor dem Schleifen zwischengespeichert wird. Wenn Sie also ein Element entfernen,$.each()
wird das Ende des (jetzt kürzeren) Arrays überschritten. (AlsosomeArray[i]
wirdundefined
undundefined.name
wird abstürzen.)Ihr "Array" ist wie gezeigt eine ungültige JavaScript-Syntax. Geschweifte Klammern
{}
stehen für Objekte mit Eigenschaftsnamen / Wert-Paaren, eckige Klammern[]
stehen jedoch für Arrays - wie folgt:In diesem Fall können Sie die
.splice()
Methode verwenden , um ein Element zu entfernen. Um das erste Element (Index 0) zu entfernen, sagen Sie:Wenn Sie den Index nicht kennen, aber das Array durchsuchen möchten, um das zu entfernende Element mit dem Namen "Kristian" zu finden, können Sie Folgendes tun:
EDIT: Ich habe gerade bemerkt, dass Ihre Frage mit "jQuery" markiert ist, also können Sie die
$.grep()
Methode ausprobieren :quelle
$.grep()
? In diesem Beispiel wird nicht viel hinzugefügt, wo ja, ich hätte sagen können!=
, aber in anderen Fällen haben Sie möglicherweise bereits eine Funktion definiert, die zufällig den gegenteiligen Test zu dem durchführt, was Sie grep möchten, also anstatt eine zu definieren Zusätzliche Funktion Sie können diese Überladung einfach verwenden, um die Ergebnisse zu invertieren.function isEven(num) { return num%2===0 }
. Sie können$.grep(someArray, isEven)
nur die geraden Zahlen aus dem Array abrufen oder$.grep(someArray, isEven, true)
das Gegenteil tun und die ungeraden Werte abrufen.ES2015
Es wird John entfernen !
quelle
Sie könnten array.filter () verwenden.
z.B
Pfeilfunktionen:
quelle
Ich habe eine dynamische Funktion erstellt, die die Objekte Array, Key und value übernimmt und nach dem Entfernen des gewünschten Objekts dasselbe Array zurückgibt:
Vollständiges Beispiel: DEMO
quelle
Dies ist eine Funktion, die für mich funktioniert:
quelle
Sie können auch versuchen, so etwas zu tun:
quelle
quelle
Verwenden Sie die Spleißfunktion für Arrays. Geben Sie die Position des Startelements und die Länge der Teilsequenz an, die Sie entfernen möchten.
quelle
Stimmen Sie für den UndercoreJS für die einfache Arbeit mit Arrays.
Die Funktion _.without () hilft beim Entfernen eines Elements:
quelle
Mit ES 6 Pfeilfunktion
quelle
Die einfachste Lösung wäre, eine Karte zu erstellen, in der die Indizes für jedes Objekt nach Namen wie folgt gespeichert werden:
quelle
Obwohl dies für diese Situation wahrscheinlich nicht angemessen ist, habe ich neulich herausgefunden, dass Sie das
delete
Schlüsselwort auch verwenden können , um ein Element aus einem Array zu entfernen, wenn Sie die Größe des Arrays nicht ändern müssen, zquelle
Diese Antwort
funktioniert nicht für mehrere Datensätze, die die Bedingung erfüllen. Wenn Sie zwei solcher aufeinanderfolgenden Datensätze haben, wird nur der erste entfernt und der andere übersprungen. Sie müssen verwenden:
stattdessen .
quelle
Es scheint einen Fehler in Ihrer Array-Syntax zu geben. Unter der Annahme, dass Sie ein Array im Gegensatz zu einem Objekt meinen, ist Array.splice hier Ihr Freund:
quelle
Sie können auch die Kartenfunktion verwenden.
quelle
Sie könnten auch verwenden
some
:quelle
Das benutze ich.
Dann ist es so einfach wie zu sagen
Ersetzen Sie eine beliebige Zahl anstelle von drei. Nach der erwarteten Ausgabe sollte sein:
quelle
Wenn Sie alle Vorkommen eines bestimmten Objekts entfernen möchten (basierend auf einer bestimmten Bedingung), verwenden Sie die Javascript-Spleißmethode in einer for-Schleife.
Da das Entfernen eines Objekts die Array-Länge beeinflussen würde, müssen Sie den Zähler um einen Schritt dekrementieren, damit die Längenprüfung erhalten bleibt.
Das obige Codefragment entfernt alle Objekte mit einem Alter von mehr als 20 Jahren.
quelle
Verwenden Sie die splice () -Funktion von Javascript.
Dies kann hilfreich sein: http://www.w3schools.com/jsref/jsref_splice.asp
quelle
Spleiß (i, 1), wobei i der inkrementelle Index des Arrays ist, entfernt das Objekt. Denken Sie jedoch daran, dass Spleiß auch die Array-Länge zurücksetzt. Achten Sie daher auf "undefiniert". Wenn Sie in Ihrem Beispiel 'Kristian' entfernen, ist i bei der nächsten Ausführung innerhalb der Schleife 2, aber someArray hat eine Länge von 1. Wenn Sie also versuchen, "John" zu entfernen, wird ein "undefinierter" Fehler angezeigt . Eine Lösung für dieses, wenn auch nicht elegante Problem besteht darin, einen separaten Zähler zu haben, um den Index des zu entfernenden Elements zu verfolgen.
quelle
Gibt nur Objekte aus dem Array zurück, deren Eigenschaft
name
nicht "Kristian" ist.Demo:
quelle
Diese Konzepte verwenden Kendo Grid
quelle
Ich denke, die Antworten sind sehr verzweigt und verknotet.
Mit dem folgenden Pfad können Sie ein Array-Objekt entfernen, das dem im modernen JavaScript-Jargon angegebenen Objekt entspricht.
quelle
Wenn Sie auf ein Objekt eines Arrays zugreifen und es entfernen möchten, können Sie einfach Folgendes versuchen.
quelle