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

JavaScript:如何筛选arr1保留与arr2有相同age键值的对象?

解决数组过滤匹配age的问题

嘿,我来帮你搞定这个数组过滤的问题~ 先拆解下你遇到的小状况,再给你两种靠谱的解决方案:

首先说下你原有代码的问题:filter的回调函数需要返回布尔值来决定是否保留当前元素,你返回x虽然因为对象是真值能勉强运行,但逻辑不够清晰;另外,每次用find遍历整个arr2,当数组元素较多时,效率会很低。还有,如果你的代码不是在类的方法中,用this.arr1和this.arr2可能会因为this指向错误导致找不到数组,进而报错。

方案1:直观的优化版

用some代替find,直接返回布尔判断结果,逻辑更简洁直接:

const arr3 = arr1.filter(x => arr2.some(y => y.age === x.age));

some方法会在找到第一个匹配的age后立刻停止遍历并返回true,比find返回对象再判断是否存在要更高效且易读。

方案2:高效的Set查找法(适合大数据量)

如果arr2的元素比较多,先把arr2里的所有age提取到一个Set中,这样查找age是否存在的时间复杂度是O(1),整体效率会提升很多:

// 先把arr2的age都存入Set
const arr2AgeSet = new Set(arr2.map(item => item.age));
// 过滤arr1,只保留age在Set中的元素
const arr3 = arr1.filter(x => arr2AgeSet.has(x.age));

不管用哪种方案,最终都能得到你期望的结果:

// 输出:[{name: 'Jake', age: 17}, {name: 'Ryan', age: 18}]
console.log(arr3);

要是你原来的代码报错,大概率是this的指向问题——如果是在全局作用域或者普通函数里,直接用arr1和arr2就行,不用加this前缀哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:17:39