[英]How to Remove duplicates from an array of objects using ES6?
我想知道合並 2 個對象數組itemsA
和itemsB
的最佳方法是什么。 合並后的數據應該在mergedList
。
標准:
source='STAPLE'
不應在合並數組中重復。name: 'Ball'
按source: 'USER'
可能存在兩次。 itemsA
有 6 個項目, itemsB
有 7 個項目, mergedList
應該有 11 個項目
let itemsA = [
{name: 'Milk', source: 'STAPLE'},
{name: 'Bread', source: 'AD'},
{name: 'Egg', source: 'STAPLE'},
{name: 'Ball', source: 'USER'},
{name: 'Pasta', source: 'STAPLE'},
{name: 'Coke', source: 'AD'}];
let itemsB = [
{name: 'Milk', source: 'USER'},
{name: 'Bread', source: 'AD'},
{name: 'Egg', source: 'STAPLE'},
{name: 'Ball', source: 'USER'},
{name: 'Mango', source: 'USER'},
{name: 'Pasta', source: 'STAPLE'},
{name: 'Coke', source: 'USER'}]
mergedList
應該等於
let mergedList = [
{name: 'Milk', source: 'STAPLE'},
{name: 'Bread', source: 'AD'},
{name: 'Egg', source: 'STAPLE'},
{name: 'Ball', source: 'USER'},
{name: 'Pasta', source: 'STAPLE'},
{name: 'Coke', source: 'AD'}]
{name: 'Milk', source: 'USER'},
{name: 'Bread', source: 'AD'},
{name: 'Ball', source: 'USER'},
{name: 'Mango', source: 'USER'},
{name: 'Coke', source: 'USER'}] ];
function merge(itemsA, itemsB) {
let merged = [];
itemsA.concat(itemsB).reduce((stapleSet, obj) => (obj.source != "STAPLE") ?
(merged.push(obj), stapleSet) :
(stapleSet.has(obj.name) || merged.push(obj),
stapleSet.add(obj.name), stapleSet), new Set());
return merged;
}
減少連接的數組 - 如果對象源是主食而不是在主食stapleSet
,則將對象的名稱添加到stapleSet
集 - 設置對象只允許每個條目中的一個 - 然后將對象推送到merged
數組。 否則將對象推送到merged
數組。
從函數返回合並后的數組。
let itemsA = [ {name: 'Milk', source: 'STAPLE'}, {name: 'Bread', source: 'AD'}, {name: 'Egg', source: 'STAPLE'}, {name: 'Ball', source: 'USER'}, {name: 'Pasta', source: 'STAPLE'}, {name: 'Coke', source: 'AD'}]; let itemsB = [ {name: 'Milk', source: 'USER'}, {name: 'Bread', source: 'AD'}, {name: 'Egg', source: 'STAPLE'}, {name: 'Ball', source: 'USER'}, {name: 'Mango', source: 'USER'}, {name: 'Pasta', source: 'STAPLE'}, {name: 'Coke', source: 'USER'}]; function merge(itemsA, itemsB) { let merged = []; itemsA.concat(itemsB).reduce((stapleSet, obj) => (obj.source != "STAPLE") ? (merged.push(obj), stapleSet) : (stapleSet.has(obj.name) || merged.push(obj), stapleSet.add(obj.name), stapleSet), new Set()); return merged; } console.log( merge(itemsA, itemsB) );
編輯:OP的If-Else格式
function merge(itemsA, itemsB) {
let merged = [];
itemsA.concat(itemsB).reduce((stapleSet, obj) => {
if (obj.source != "STAPLE") {
merged.push(obj);
return stapleSet;
} else {
if (stapleSet.has(obj.name)) {
return stapleSet;
} else {
merged.push(obj);
stapleSet.add(obj.name);
return stapleSet;
}
}
}, new Set());
return merged;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.