Array-Element basierend auf Objekteigenschaft entfernen

Lesezeit: 5 Minuten

Ich habe ein Array von Objekten wie folgt:

var myArray = [
    {field: 'id', operator: 'eq', value: id}, 
    {field: 'cStatus', operator: 'eq', value: cStatus}, 
    {field: 'money', operator: 'eq', value: money}
];

Wie entferne ich ein bestimmtes Objekt basierend auf seiner Eigenschaft?

zB Wie würde ich das Array-Objekt mit „Geld“ als Feldeigenschaft entfernen?

Array Element basierend auf Objekteigenschaft entfernen
jAndy

Eine Möglichkeit:

myArray = myArray.filter(function( obj ) {
    return obj.field !== 'money';
});

Bitte beachte, dass filter erstellt ein neues Array. Alle anderen Variablen, die sich auf das ursprüngliche Array beziehen, würden die gefilterten Daten nicht erhalten, obwohl Sie Ihre ursprüngliche Variable aktualisieren myArray mit dem neuen Bezug. Mit Vorsicht verwenden.

  • Beachten Sie, dass filter() ist nur für Internet Explorer 9+ verfügbar

    – Jessegavin

    29. April 2013 um 14:51 Uhr

  • @jessegavin in der Tat. Ich hätte erwähnen sollen, dass es viele gute gibt es5 Shim verfügbare Bibliotheken, die die Funktionalität nachahmen (nur für den Fall, dass Sie ältere Browser unterstützen möchten)

    – jAndy

    29. April 2013 um 14:57 Uhr

  • filter() erstellt ein neues Array, was in Ordnung ist, wenn Sie die Variable neu zuweisen können und wissen, dass es keine anderen Codebereiche gibt, die darauf verweisen. Dies funktioniert nicht, wenn Sie speziell das ursprüngliche Array-Objekt ändern müssen.

    – Brian Glick

    26. September 2014 um 17:55 Uhr

  • Was ist, wenn das Array eine Baumstruktur ist? ar beforeDeleteOperationArray=[ { “id”: 3.1, “name”: “test 3.1”, “activityDetails”: [ { “id”: 22, “name”: “test 3.1” }, { “id”: 23, “name”: “changed test 23” } ] } ]und ich möchte id:23 löschen

    – vergessen

    18. Januar 2017 um 11:37 Uhr

  • @forgottofly guter Punkt – Antwort funktioniert nur in begrenzten Fällen. Haben Sie eine Antwort auf Ihre Frage gefunden?

    – JackTheKnife

    19. Juli 2018 um 20:16 Uhr


Array Element basierend auf Objekteigenschaft entfernen
Niet the Dark Absol

Durchlaufen Sie das Array und splice aus denen, die Sie nicht wollen. Iterieren Sie zur einfacheren Verwendung rückwärts, damit Sie die Live-Natur des Arrays nicht berücksichtigen müssen:

for (var i = myArray.length - 1; i >= 0; --i) {
    if (myArray[i].field == "money") {
        myArray.splice(i,1);
    }
}

  • Was meinst du mit der Live-Natur des Arrays? @Neit the Dark Absol

    – sisimh

    1. Juni 2015 um 12:46 Uhr


  • @sisimh bedeutet, dass, wenn Sie vorwärts über ein Array iterieren, indem Sie seine Länge als Teil der Iterationslogik verwenden und sich seine Länge ändert, weil Elemente entfernt oder hinzugefügt wurden, Sie am Ende vom Ende des Arrays laufen oder die Operation nicht ausführen können jedes Element im Array. Rückwärts zu gehen macht dies viel unwahrscheinlicher, da es eher auf einen statischen 0-Index als auf eine gleitende Länge hinarbeitet.

    – Klors

    10. Juli 2015 um 16:14 Uhr

  • Was ist, wenn das Array eine Baumstruktur ist? ar beforeDeleteOperationArray=[ { “id”: 3.1, “name”: “test 3.1”, “activityDetails”: [ { “id”: 22, “name”: “test 3.1” }, { “id”: 23, “name”: “changed test 23” } ] } ]und ich möchte id:23 löschen

    – vergessen

    18. Januar 2017 um 11:37 Uhr

  • Irgendwie offensichtlich, aber wenn Sie nur erwarten, ein einzelnes eindeutiges Element zu entfernen, können Sie für die Leistung einen Umbruch in die ‘if’-Anweisung werfen, damit die Schleife nicht unnötig über den Rest des Arrays iteriert.

    – Patrick Borkowicz

    31. März 2017 um 13:21 Uhr

  • @Klors Danke für die Erklärung. Ist es gut, das Array wie in der Antwort immer rückwärts zu lesen?

    – kittu

    17. Juli 2017 um 8:47 Uhr


Angenommen, Sie möchten das zweite Objekt anhand seiner Feldeigenschaft entfernen.

Mit ES6 ist es so einfach.

myArray.splice(myArray.findIndex(item => item.field === "cStatus"), 1)

  • Ich habe dies versucht, aber anstatt das 3. Element aus dem OP-Array zu “entfernen”, hat Ihr Code “gefiltert” und nur das 3. Element angezeigt.

    – Compaq LE2202x

    30. Juli 2018 um 12:52 Uhr

  • @ CompaqLE2202x 2 Jahre später ist es Ihnen wahrscheinlich schon klar, aber für zukünftige Entwickler: splice ändert das ursprüngliche Array, sodass der Wert, den Sie zurückerhalten, das Element ist, das entfernt wurde, aber wenn Sie es sich das nächste Mal ansehen myArray Der Artikel wird fehlen.

    – David Mulder

    24. April 2020 um 14:20 Uhr

  • Wenn das Element von findIndex nicht gefunden wird, wird -1 zurückgegeben und das letzte Element wird per Splice entfernt, obwohl es nicht zum Prädikat passt.

    – Jannik

    29. September 2020 um 16:10 Uhr

In ES6 nur eine Zeile.

const arr = arr.filter(item => item.key !== "some value");

🙂

1645975268 173 Array Element basierend auf Objekteigenschaft entfernen
Sridhar

Sie können Lodashs verwenden findIndex um den Index des spezifischen Elements zu erhalten und dann mit ihm zu spleißen.

myArray.splice(_.findIndex(myArray, function(item) {
    return item.value === 'money';
}), 1);

Aktualisieren

Sie können auch ES6 verwenden findIndex()

Die Methode findIndex() gibt den Index des ersten Elements im Array zurück, das die bereitgestellte Testfunktion erfüllt. Andernfalls wird -1 zurückgegeben.

const itemToRemoveIndex = myArray.findIndex(function(item) {
  return item.field === 'money';
});

// proceed to remove an item only if it exists.
if(itemToRemoveIndex !== -1){
  myArray.splice(itemToRemoveIndex, 1);
}

  • Was ist das Array ist eine Baumstruktur?

    – vergessen

    18. Januar 2017 um 11:34 Uhr

  • @forgottofly Baumstruktur? Ich denke myArray Hier ist eine Reihe von Objekten.

    – Sridhar

    18. Januar 2017 um 12:17 Uhr

  • Was ist, wenn das Array eine Baumstruktur ist? var beforeDeleteOperationArray=[ { “id”: 3.1, “name”: “test 3.1”, “activityDetails”: [ { “id”: 22, “name”: “test 3.1” }, { “id”: 23, “name”: “changed test 23” } ] } ]und ich möchte id:23 löschen

    – vergessen

    18. Januar 2017 um 13:59 Uhr


  • Wenn das Element von findIndex (ES6-Version) nicht gefunden wird, wird -1 zurückgegeben und das letzte Element wird durch splice entfernt, obwohl es nicht mit dem Prädikat übereinstimmt.

    – Jannik

    29. September 2020 um 16:08 Uhr


  • @Yannic Schöner Fang. Danke für den Hinweis. Habe meine Antwort darauf aktualisiert.

    – Sridhar

    7. Oktober 2020 um 6:57 Uhr

1645975268 930 Array Element basierend auf Objekteigenschaft entfernen
Freitag

Hier ist eine weitere Option mit jQuery grep. Passieren true als dritter Parameter, um sicherzustellen, dass grep Elemente entfernt, die Ihrer Funktion entsprechen.

users = $.grep(users, function(el, idx) {return el.field == "money"}, true)

Wenn Sie bereits jQuery verwenden, ist kein Shim erforderlich, was im Gegensatz zur Verwendung nützlich sein könnte Array.filter.

  • Was ist das Array ist eine Baumstruktur?

    – vergessen

    18. Januar 2017 um 11:34 Uhr

  • @forgottofly Baumstruktur? Ich denke myArray Hier ist eine Reihe von Objekten.

    – Sridhar

    18. Januar 2017 um 12:17 Uhr

  • Was ist, wenn das Array eine Baumstruktur ist? var beforeDeleteOperationArray=[ { “id”: 3.1, “name”: “test 3.1”, “activityDetails”: [ { “id”: 22, “name”: “test 3.1” }, { “id”: 23, “name”: “changed test 23” } ] } ]und ich möchte id:23 löschen

    – vergessen

    18. Januar 2017 um 13:59 Uhr


  • Wenn das Element von findIndex (ES6-Version) nicht gefunden wird, wird -1 zurückgegeben und das letzte Element wird durch splice entfernt, obwohl es nicht mit dem Prädikat übereinstimmt.

    – Jannik

    29. September 2020 um 16:08 Uhr


  • @Yannic Schöner Fang. Danke für den Hinweis. Habe meine Antwort darauf aktualisiert.

    – Sridhar

    7. Oktober 2020 um 6:57 Uhr

1645975269 674 Array Element basierend auf Objekteigenschaft entfernen
Senthuran

Wir können das Element basierend auf der Eigenschaft mit den folgenden 2 Ansätzen entfernen.

  1. Filtermethode verwenden
testArray.filter(prop => prop.key !== 'Test Value')
  1. Verwendung der Splice-Methode. Für diese Methode müssen wir den Index der Eigenschaft finden.
const index = testArray.findIndex(prop => prop.key === 'Test Value')
testArray.splice(index,1)

877420cookie-checkArray-Element basierend auf Objekteigenschaft entfernen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy