根据对象属性移除数组元素

我有这样的对象数组:

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

如何根据其属性删除特定的一个?

例如,我将如何删除数组对象与'钱'作为字段属性?

一种可能性:

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

请注意, filter会创build一个新的数组。 任何引用原始数组的其他variables都不会获得过滤数据,尽pipe您使用新引用更新了原始variablesmyArray 。 谨慎使用。

遍历数组,并splice你不想要的。 为了便于使用,向后迭代,因此不必考虑数组的活性:

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

这是使用jQuery grep的另一个选项。 作为第三个parameter passingtrue以确保grep删除与您的函数匹配的项目。

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

如果您已经使用jQuery,那么不需要填充,这可能是有用的,而不是使用Array.filter

以下是如果您不使用jQuery的代码。 演示

 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); 

你也可以使用有很多function的下划线库。

Underscore是JavaScript的一个工具带库,提供了很多function性的编程支持

您可以使用lodash的findIndex获取特定元素的索引,然后使用它进行拼接。

 myArray.splice(_.findIndex(myArray, function(item) { return item.value === 'money'; }), 1); 
 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 

元素是数组中的一个对象。 第三个参数true意味着将返回一个元素数组,其失败了你的函数逻辑, false意味着将返回一个元素数组,失败你的function逻辑。

jAndy的解决scheme可能是最好的,但如果你不能依靠filter,你可以做一些事情:

 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; }