423 Stimmen

Entfernen Sie ein Array-Element basierend auf einer Objekteigenschaft

Ich habe ein Array von Objekten so:

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?

Zum Beispiel: Wie würde ich das Array-Objekt mit 'money' als Feld-Eigenschaft entfernen?

584voto

jAndy Punkte 223172

Eine Möglichkeit:

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

Bitte beachten Sie, dass filter ein neues Array erstellt. Andere Variablen, die auf das ursprüngliche Array verweisen, würden die gefilterten Daten nicht erhalten, obwohl Sie Ihre Originalvariable myArray mit dem neuen Verweis aktualisieren. Verwenden Sie es mit Vorsicht.

108voto

Niet the Dark Absol Punkte 310257

Durchlaufen Sie das Array und splice diejenigen heraus, die Sie nicht möchten. Für eine einfachere Verwendung durchlaufen Sie rückwärts, sodass Sie die lebendige 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);
    }
}

100voto

Peracek Punkte 1571

Sagen Sie, Sie möchten das zweite Objekt anhand seines Feldes entfernen.

Mit ES6 ist es so einfach wie das.

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

62voto

Supun Kavinda Punkte 1034

In ES6, nur eine Zeile.

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

:)

26voto

Sridhar Punkte 11066

Sie können lodash's findIndex verwenden, um den Index des spezifischen Elements zu erhalten und dann mit ihm zu splicen.

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

Aktualisieren

Sie können auch findIndex() in ES6 verwenden

Die findIndex() Methode 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';
});

// Fahren Sie nur mit dem Entfernen eines Elements fort, wenn es existiert.
if(itemToRemoveIndex !== -1){
  myArray.splice(itemToRemoveIndex, 1);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X