2016-08-08 325 views
-1
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中的第一个值。即带有1的id被删除。与之相似,如果我们有delete_id = 2,3则仅删除2.我想删除2和3两个...

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

http://stackoverflow.com/questions/500606/deleting-array-elements-in-javascript-delete-vs-splice? –

+0

我可以使用拼接从对象数组中删除吗? – Patrick

+0

数组是数组,不是? –

回答

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

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

首先找到从 阵列(资料表)的对象,值= 1(delete_id),键=在JSON密钥(ID),该对象的阵列中的

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

GET索引

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

删除其索引

tabledata.splice(index,1); 
1

的代码,如果你改变了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);

1

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

它会检查obj.id是否不在delete_id中,那么obj将被包含在一个新的过滤数组中。此外,它将保持tabledata完好无损。

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