繁体   English   中英

从对象数组中删除对象

[英]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的对象。它应删除对象数组中的对象,并给出最终结果,如下所示:

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

首先从数组(tabledata)中找到对象,值= 1(delete_id),键= json(id)中的键

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

获取该对象在数组中的索引

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

删除其索引

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM