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

如何通过一个数组过滤另一个数组?JS数组过滤代码正确性咨询

问题解决方法

首先,你写的这段代码无法得到正确结果,问题出在firstArray.findIndex((obj)=> obj.id === o.id)这部分:firstArray是字符串数组,里面的元素是'10'、'12'这类字符串,并没有id属性,所以这个判断条件永远不成立,findIndex会一直返回-1,最终过滤后得到的是空数组。

正确实现方式

方法1:使用Array.includes()(简单直观)

直接在filter回调里判断当前对象的id是否存在于firstArray中:

const firstArray = ['10','12'];
let secondArray = [{"id":"10", "name":"name 10"}, {"id":"11", "name":"name 11"}, {"id":"12", "name":"name 12"}];
secondArray = secondArray.filter(o => firstArray.includes(o.id));
console.log(secondArray);

运行后会输出你想要的结果:[{"id":"10","name":"name 10"},{"id":"12","name":"name 12"}]

方法2:使用Set优化查找性能(适合数据量大的场景)

如果firstArray元素很多,用Set的查找效率更高(时间复杂度O(1),数组includes是O(n)):

const firstArray = ['10','12'];
const idSet = new Set(firstArray);
let secondArray = [{"id":"10", "name":"name 10"}, {"id":"11", "name":"name 11"}, {"id":"12", "name":"name 12"}];
secondArray = secondArray.filter(o => idSet.has(o.id));
console.log(secondArray);

这个方法和方法1结果一致,但处理大量数据时性能更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:31:07