从对象数组中删除对象

Delete objects from array of objects

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的objects,应该删除objects数组中的objects,最终结果如下:

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

谁能告诉我如何实现这一目标。我尝试使用以下功能。它只删除 variale delete_id 中的第一个值。即删除带有 1 的 id。类似地,如果我们有 delete_id = 2,3 那么它只会删除 2。我想同时删除 2 和 3...

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

First find the object from the array(tabledata),value=1(delete_id),key=the key in json(id)

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

get index of that object in the array

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

delete its index

    tabledata.splice(index,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);

如果您更改 removeID 代码以查看索引是否等于 -1,代码就会运行

function removeID(delete_id) {
  tabledata = tabledata.filter(function(obj) {
    return delete_id.indexOf(obj.id)===-1;  //added === -1 here
  });
}
var tabledata = [{
  id: 1,
  name: "Rick",
  upper: "0.67"
}, {
  id: 2,
  name: 'david',
  upper: "0.46"
}, {
  id: 3,
  name: 'ashley',
  upper: null
}];

var ids = [1,2];  //defined it as an array (not sure if you did)
removeID(ids);
console.log(tabledata);

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

它将检查 obj.id 是否不在 delete_id 中,然后 obj 将包含在新的过滤数组中。它还会保持表数据完好无损。

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