You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从对象数组a中过滤出对象数组b中不存在的元素?

解决JavaScript数组过滤问题

给定两个对象数组:

let a = [{name:'Hari',age:2},{name:'Chana',age:4},{name:'Like',age:5}]
let b = [{name:'Chana',age:14},{name:'Like',age:15}];

你原来的代码:

let c =a.filter(elm => b.find(el => el.name === elm.name));

之所以不符合预期,是因为b.find(...)会返回b中匹配name的对象(属于真值),所以filter会保留a中在b里存在同名的元素,最终结果和你要的刚好相反。

要得到预期的[{name:'Hari',age:2}],只需要对查找结果取反,保留a中在b里找不到同名的元素,以下是两种实现方式:

方法一:直接取反(简单场景)

直接在原代码基础上添加取反符号,逻辑清晰适合小数据量:

let c = a.filter(elm => !b.find(el => el.name === elm.name));

方法二:用Set优化(大数据量场景)

如果数组元素较多,find每次遍历b数组的效率较低,可以先把b里的name提取到Set中,利用Set的O(1)查找性能提升效率:

// 先提取b中所有name存入Set
const bNameSet = new Set(b.map(item => item.name));
// 过滤a中name不在Set内的元素
let c = a.filter(elm => !bNameSet.has(elm.name));

内容的提问来源于stack exchange,提问作者Rijo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:40:35