簡體   English   中英

從JavaScript中的對象數組中刪除對象

[英]Remove objects from array of object in javascript

我正在嘗試使用從服務器獲取的增量數據從對象數組中刪除對象。 我在項目中使用下划線。

有沒有簡單的方法可以做到這一點,而不是循環和分配?

主陣列

var input = [
   {name: "AAA", id: 845,status:1},
   {name: "BBB", id: 839,status:1},
   {name: "CCC", id: 854,status:1}
];

即將被刪除

var deltadata = [
   {name: "AAA", id: 845,status:0},
   {name: "BBB", id: 839,status:0}
];

預期產量

var finaldata =  [
  {name: "CCC", id: 854,status:1}
]

嘗試這個

var finaldata = _.filter(input, function(item) {
    return !(_.findWhere(deltadata, {id: item.id}));
});

它確實假定您具有唯一的ID。 也許您可以提出更好的建議。

一個簡單的filter可以做到:

var finaldata = _.filter(input, function(o) {
    return _.findWhere(deltadata, o) === undefined;
});

findWhere效率更高的findWhere是創建一個具有要刪除的ID的查找映射,然后通過該過濾進行過濾:

var idsToRemove = _.reduce(deltadata, function(m, o) {
    m[o.id] = true;
    return m;
}, {});
var finaldata = _.reject(input, function(o) { return o.id in idsToRemove; });

這是一個簡單的解決方案。 正如其他人所提到的,我認為沒有循環就不可能做到這一點。 您還可以在條件中添加狀態和名稱檢查,因為這只是比較ID。

var finaldata = input.filter(function(o) {
    for (var i = 0; i < deltadata.length; i++)
       if (deltadata[i].id === o.id) return false;
    return true;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM