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

436

我有一个像这样的对象数组:

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

我如何根据属性删除特定的数组对象? 例如,我如何删除字段属性为“money”的数组对象?
12个回答

1
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
为什么我不能依赖filter()函数? - imperium2335
2
因为它是JavaScript 1.6的一部分,而IE8及以下版本或旧版浏览器不支持该版本。 - Rob M.

1
如果您不使用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);

你也可以使用underscore库,它有很多函数。 Underscore是一个JavaScript实用工具库,提供了许多函数式编程支持。

7
在网络上留下这个例子非常危险...它可以在示例数据中工作,但无法处理其他任何数据。splice(i)意味着它将删除数组中从第一个值为"money"的实例开始及之后的所有元素,这完全不符合操作要求。如果我们改为splice(i,1),仍然是不正确的,因为它不会评估下一个连续的项目(还需要递减i)。这就是为什么应该倒序处理数组中的删除操作,以便删除项目不会更改处理下一个项目的索引。 - Chris Schaller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接