wake-up-neo.com

Entfernen Sie das Array-Element basierend auf der Objekteigenschaft

Ich habe so eine Reihe von Objekten:

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

Wie entferne ich eine bestimmte Eigenschaft basierend auf ihrer Eigenschaft?

z.B. Wie würde ich das Array-Objekt mit "money" als Feldeigenschaft entfernen?

177
imperium2335

Eine Möglichkeit:

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

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

256
jAndy

Durchlaufen Sie das Array und splice out die, die Sie nicht möchten. Um die Verwendung zu vereinfachen, iterieren Sie rückwärts, sodass Sie die Live-Eigenschaften 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);
    }
}
67

Sie können lodashs findIndex verwenden, um den Index des bestimmten Elements abzurufen und dann damit zu verbinden.

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

Update

Sie können auch ES6s findIndex () verwenden

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

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

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

Mit ES6 ist das so einfach.

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

Hier ist eine weitere Option, die jQuery grep verwendet. Übergeben Sie true als dritten 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. Dies kann im Gegensatz zu Array.filter nützlich sein.

8
sifriday

Nachfolgend finden Sie den Code, wenn Sie nicht jQuery verwenden. Demo

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

alert(myArray.length);

for(var i=0 ; i<myArray.length; i++)
{
    if(myArray[i].value=='money')
        myArray.splice(i);
}

alert(myArray.length);

Sie können auch eine Unterstrichbibliothek verwenden, die viele Funktionen hat.

Underscore ist eine Utility-Belt-Bibliothek für JavaScript, die eine Menge Unterstützung für die Funktionsprogrammierung bietet

4
Umair Saleem
var myArray = [
    {field: 'id', operator: 'eq', value: id}, 
    {field: 'cStatus', operator: 'eq', value: cStatus}, 
    {field: 'money', operator: 'eq', value: money}
];
console.log(myArray.length); //3
myArray = $.grep(myArray, function(element, index){return element.field == "money"}, true);
console.log(myArray.length); //2

Element ist ein Objekt im Array . Der dritte Parameter true bedeutet, dass ein Array von Elementen zurückgegeben wird, das Ihre Funktionslogik nicht erfüllt. false bedeutet, dass ein Array von Elementen zurückgegeben wird, die Ihre Funktionslogik nicht erfüllen.

2
Sandeep sandy

var myArray = [
    {field: 'id', operator: 'eq', value: 'id'}, 
    {field: 'cStatus', operator: 'eq', value: 'cStatus'}, 
    {field: 'money', operator: 'eq', value: 'money'}
];
var newArray = _.remove(myArray, function(n) {
  return n.value === 'money';;
});
console.log('Array');
console.log(myArray);
console.log('New Array');
console.log(newArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>

1
Parth Raval

die Lösung von jAndy ist wahrscheinlich am besten, aber wenn Sie sich nicht auf Filter verlassen können, können Sie Folgendes tun:

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

myArray.remove_key = function(key){
    var i = 0, 
        keyval = null;
    for( ; i < this.length; i++){
        if(this[i].field == key){
            keyval = this.splice(i, 1);
            break;
        }
    }
    return keyval;
}
1
Rob M.

Basierend auf den folgenden Kommentaren wird der Code zum Entfernen eines Objekts basierend auf einem Schlüsselnamen und einem Schlüsselwert angegeben

 var items = [ 
  { "id": 3.1, "name": "test 3.1"}, 
  { "id": 22, "name": "test 3.1" }, 
  { "id": 23, "name": "changed test 23" } 
  ]

    function removeByKey(array, params){
      array.some(function(item, index) {
        return (array[index][params.key] === params.value) ? !!(array.splice(index, 1)) : false;
      });
      return array;
    }

    var removed = removeByKey(items, {
      key: 'id',
      value: 23
    });

    console.log(removed);
0
JackTheKnife