根据object属性删除数组元素

时间:2013-03-08 06:14:25

标签: javascript jquery arrays object properties

我有一组像这样的对象:

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

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

e.g。如何使用'money'作为字段属性删除数组对象?

13 个答案:

答案 0 :(得分:276)

一种可能性:

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

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

答案 1 :(得分:75)

遍历数组,splice输出你不想要的数组。为了便于使用,请向后迭代,这样您就不必考虑数组的实时特性:

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

答案 2 :(得分:18)

在ES6中,只有一行。

const arr = arr.filter(item => item.key !== "some value");

:)

答案 3 :(得分:13)

假设您要通过它的field属性删除第二个对象。

使用ES6就像这一样简单。

myArray.splice(myArray.findIndex(item => item.field === "cStatus"), 1)

答案 4 :(得分:10)

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

myArray.splice(_.findIndex(myArray, function(item) {
    return item.value === 'money';
}), 1);

<强>更新

您也可以使用ES6&#39; findIndex()

  

findIndex()方法返回数组中第一个满足提供的测试函数的元素的索引。否则返回-1。

myArray.splice(myArray.findIndex(myArray, function(item) {
    return item.value === 'money';
}), 1);

答案 5 :(得分:8)

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

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

如果您已经在使用jQuery,则不需要填充程序,这可能非常有用,而不是使用Array.filter

答案 6 :(得分:4)

如果您不使用jQuery,以下是代码。 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);

您还可以使用具有许多功能的下划线库。

Underscore是一个用于JavaScript的实用程序带库,提供了许多函数式编程支持

答案 7 :(得分:3)

Private Sub txtQuantity_Click()
    Dim vote As Integer
    If txtQuantity.Text <> "" Then
        vote = Val(txtQuantity.Text)
    Else
        vote = 0
    End If

    vote = vote + 1
    txtQuantity.Text = vote

End Sub

Element是数组中的一个对象。 第三个参数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表示将返回一个使您的函数逻辑失败的元素数组。

答案 8 :(得分:2)

使用lodash库:

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>

答案 9 :(得分:1)

jAndy的解决方案可能是最好的,但如果你不能依赖过滤器,你可以做类似的事情:

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

答案 10 :(得分:1)

基于下面的一些评论,该代码给出了如何根据键名和键值删除对象的代码

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

答案 11 :(得分:0)

我们可以使用以下2种方法根据属性删除元素。

  1. 使用过滤器方法
testArray.filter(prop => prop.key !== 'Test Value')
  1. 使用拼接方法。对于这种方法,我们需要找到属性的索引。
const index = testArray.findIndex(prop => prop.key === 'Test Value')
testArray.splice(index,1)

答案 12 :(得分:-1)

使用lodash库很简单

_.remove(myArray , { field: 'money' });
相关问题