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

高效筛选对象数组:保留ID匹配指定数组值的元素的最优方法

最高效的数组筛选实现方案

嘿,这个需求其实很常见,要做到最高效的话,核心思路是把数组的线性查找转换成集合的常数时间查找,具体步骤和原因如下:

为什么选这个方案?

如果直接写 arr2.filter(item => arr1.includes(item.id)),虽然代码简洁,但每次调用includes都会遍历整个arr1——当arr1和arr2的元素数量较多时,时间复杂度会达到O(m*n),性能会随着数据量增大急剧下降。而用Set的话,查找操作是O(1)的,整体时间复杂度能降到O(m+n),效率提升非常明显。

具体实现代码

var arr1 = [11, 12, 13];
var arr2 = [ { id: 11, name: "name 1" }, { id: 12, name: "name 2" }, { id: 13, name: "name 3" }, { id: 14, name: "name 4" }, ];

// 第一步:把arr1转换成Set,将线性查找优化为常数时间查找
const idSet = new Set(arr1);
// 第二步:过滤arr2,只保留id在Set中的元素
var newArray = arr2.filter(item => idSet.has(item.id));

console.log(newArray);
// 输出结果:[ { id: 11, name: "name 1" }, { id: 12, name: "name 2" }, { id: 13, name: "name 3" } ]

补充说明

  • 如果你的数据量特别小(比如arr1只有几个元素),直接用includes的写法也能凑合用,但一旦数据规模变大,Set的优势就立刻体现出来了。
  • 这个方案不仅适用于数字id,字符串id同样适用,只要是可哈希的类型都没问题。

内容的提问来源于stack exchange,提问作者tako-sphynx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:32:45