根据对象属性移除数组元素
我有这样的对象数组:
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; }