在Javascript中删除子数组项

3

如何在JavaScript/jQuery中删除以下数组中id = 2的整个子数组项?

arr = [{
    "id": 1,
    "name": "Steve"
},{
    "id": 2,
    "name": "Martin"
},{
    "id": 3,
    "name": "Short"
}]

我不确定在这种情况下如何使用grepsplice

我期望的输出是:

newArr = [{
    "id": 1,
    "name": "Steve"
},{
    "id": 3,
    "name": "Short"
}]
5个回答

8
尝试使用Array.prototype.filter来处理这个情况,
var arr = [ {"id":1,"name":"Steve"} , {"id":2,"name":"Martin"} , {"id":3,"name":"Short"} ];
var newArr = arr.filter(function(itm){
  return itm.id !== 2;
});

@Shanka 很高兴能帮忙! :) - Rajaprabhu Aravindasamy

1
你可以遍历数组并在找到id时使用splice。

var arr = [{"id": 1,"name": "Steve"},{"id": 2,"name": "Martin"},{"id": 3,"name": "Short"}];
for (var i=0; i<arr.length; ++i) {
    if (arr[i].id == 2) {
        arr.splice(i, 1);
    }
}
alert(JSON.stringify(arr));


0

您的问题的清晰解决方案:

var newArr = arr.filter(function(el) { return el.id!= 2; }); 
console.log(newArr);

0

这是我做的方式

    var toRemove = "2";
    var toKeep = [];
    var arr = [ {"id":1,"name":"Steve"} , {"id":2,"name":"Martin"} , {"id":3,"name":"Short"} ];

    var listOfItems = JSON.stringify(arr);

    var splitItems = listOfItems.split('},');

    for(var i = 0; i< splitItems.length; i++){

    var details = splitItems[i].split(',');

    if(details[0].split(':')[1] !== toRemove){

    var people = {id:details[0].split(':')[1], name:details[1].split(':')[1].replace('}]', '')};

    toKeep.push(people);

    }


    }

    console.log(toKeep);

0
在我的情况下,我想从另一个数组中减去一个数组。因此,要从另一个包含复杂对象(例如带有id字段的对象)的子数组中排除。
对于非复杂数组,您可以使用此处的答案:https://dev59.com/v1cO5IYBdhLWcg3wtz71#53092728 否则,对于更复杂的对象,您可以使用以下方法:
    const fullArray = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }];
    const subArray = [{ id: 1 }, { id: 3 }];
    const resultArray = fullArray.filter(
        (x) => !subArray.find((x2) => x.id === x2.id)
    );

所以,这基本上意味着,将不在subArray中的项目返回给我。


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