3 回答

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果您的unique數(shù)組也非常大,請(qǐng)先將unique數(shù)組轉(zhuǎn)換為一組,這樣可以節(jié)省循環(huán)unique數(shù)組以檢查匹配的時(shí)間。
然后用于Array.filter獲取not in unique元素。
let all = [{id:1, name: 'Alex'}, {id:2, name: 'James'},{id:3, name: 'Bob'},{id:4, name: 'lara'},{id:5, name: 'Dan'} ,{id:6, name: 'Jes'}]
let unique = [{id:2, name: 'James'},{id:3, name: 'Bob'}]
function getNotInUnique(src, target) {
let uniqueSet = new Set(target.map(member => member.id))
return src.filter(member => !uniqueSet.has(member.id))
}
console.log(getNotInUnique(all, unique))

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
構(gòu)建關(guān)聯(lián)數(shù)組以有效查找是否應(yīng)過濾掉成員。
lookup = {}
for (const um uniqueMembers)
lookup[um.id] = 1;
resultArray = allMembers.filter( mem => !lookup.hasOwnProperty(mem) );
在此之后發(fā)布的兩個(gè)解決方案建議使用filterand some。這些解決方案是 O(N 2 )。這個(gè)應(yīng)該是 O(N),這樣更好。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以filter與一起使用some。
const allMembers = [
{id:1, name: 'Alex'},{id:2, name: 'James'},{id:3, name: 'Bob'}, {id:4, name: 'lara'}, {id:5, name: 'Dan'}, {id:6, name: 'Jes'}
];
const uniqueMembers = [
{id:1, name: 'Alex'},{id:2, name: 'James'},{id:3, name: 'Bob'}
];
const res = allMembers.filter(m => !uniqueMembers.some(({id})=>m.id===id));
console.log(res);
添加回答
舉報(bào)