[英]Remove duplicates from javascript objects array based on object property value
[英]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.