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?
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.
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);
}
}
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);
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)
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.
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
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.
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>
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;
}
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);