3 回答
TA贡献1833条经验 获得超4个赞
如果您的unique数组也非常大,请先将unique数组转换为一组,这样可以节省循环unique数组以检查匹配的时间。
然后用于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贡献1875条经验 获得超5个赞
构建关联数组以有效查找是否应过滤掉成员。
lookup = {}
for (const um uniqueMembers)
lookup[um.id] = 1;
resultArray = allMembers.filter( mem => !lookup.hasOwnProperty(mem) );
在此之后发布的两个解决方案建议使用filterand some。这些解决方案是 O(N 2 )。这个应该是 O(N),这样更好。
TA贡献1804条经验 获得超8个赞
您可以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);
添加回答
举报