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

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

我如何删除一个特定的基于它的属性?

例:我该如何移除以“money”作为字段属性的数组对象?


当前回答

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是数组中的一个对象。 第三个参数true表示将返回一个元素数组,这个数组不符合你的函数逻辑,false表示将返回一个元素数组,这个数组不符合你的函数逻辑。

其他回答

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是数组中的一个对象。 第三个参数true表示将返回一个元素数组,这个数组不符合你的函数逻辑,false表示将返回一个元素数组,这个数组不符合你的函数逻辑。

遍历数组,并拼接出不需要的数组。为了更容易使用,向后迭代,这样你就不必考虑数组的活动性质:

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

我们可以使用以下两种方法基于属性删除元素。

使用过滤法

testArray。过滤器(道具=>道具。== '测试值')

采用拼接法。对于这个方法,我们需要找到属性的索引。

const index = testArray。findIndex(道具=>道具。key === '测试值') testArray.splice(指数(1)

一种可能性:

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

请注意,过滤器创建了一个新数组。尽管您使用新的引用更新了原始变量myArray,但引用原始数组的任何其他变量都不会得到过滤后的数据。请谨慎使用。

下面是使用jQuery grep的另一个选项。传递true作为第三个参数,以确保grep删除与函数匹配的项。

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

如果你已经在使用jQuery,那么不需要填充,这可能比使用Array.filter有用。