从对象数组中删除对象

时间:2016-08-08 16:37:23

标签: javascript arrays loops object underscore.js

Object {Results:Array[3]}
Results:Array[3]
[0-2]
    0:Object
           id=1     
           name: "Rick"
           upper:"0.67"
    1:Object
           id=2     
           name:'david'
           upper:"0.46"
    2:Object
           id=3     
           name:'ashley'
           upper:null

我有如上所示的这个对象数组。和一个名为delete_id的变量

delete_id = 1,2

所以这表示id为1和2的对象。它应该删除对象数组中的对象,并给出最终结果如下:

Object {Results:Array[1]}
Results:Array[3]
[0]
    0:Object
           id=3     
           name:'ashley'
           upper:null

有人可以让我知道如何实现这一目标。我尝试使用以下功能。它只删除变量delete_id中的第一个值。即删除id为1。相似如果我们有delete_id = 2,3那么它只删除2.我想删除2和3两个...

function removeID(delete_id) {
    tabledata = tabledata.filter(function (obj) {
        return delete_id.indexOf(obj.id);
    });

4 个答案:

答案 0 :(得分:1)

function findObj(array,value,key) {
            var result = array.filter(function (obj) {
                if (obj[key] === value || obj[key] == value)
                    return obj;
            });
            return result;
        };
  

首先从中找到对象   array(tabledata),value = 1(delete_id),key = json中的键(id)

    var selectedObj=findObj(tabledata,delete_id,'id');
  

获取数组中该对象的索引

    var index=tabledata.indexOf(selectedObj[0]);
  

删除其索引

    tabledata.splice(index,1);

答案 1 :(得分:1)

您可以使用.split().map()delete_id字符串转换为数字ID数组。然后,您可以使用.filter()进行清理。



var players = [
  {
    id: 1,
    name: "Rick",
    upper: "0.67"
  },{
    id: 2,
    name: "david",
    upper: "0.46"
  },{
    id: 3,
    name: "ashley",
    upper: null
  }
];

var delete_id = "1,2";

var exclude = delete_id.split(',').map(Number);

players = players.filter(function(player) {
  return exclude.indexOf(player.id) == -1;
});

console.log(players);




答案 2 :(得分:1)

如果更改removeID代码以查看索引是否等于-1

,代码将运行

props

答案 3 :(得分:1)

我假设delete_id是一个整数数组。在这种情况下,您可以过滤以使用下面的代码排除提供的ID。

它将检查obj.id是否不在delete_id中,然后obj将包含在新的过滤数组中。它也会保留tabledata。

var filtered = tabledata.filter(function(obj) {
   return !(obj.id in delete_id)
})