You need to enable JavaScript to run this app. 如何用现代ES6写法替代嵌套for循环实现属性匹配的数组过滤需求
优惠活动
大模型
产品
解决方案
定价
更多

如何用现代ES6写法替代嵌套for循环实现属性匹配的数组过滤需求

最优实现方案

你原来的双层循环时间复杂度为O(n*m)(n、m分别为两个数组的长度),当数组规模较大时性能损耗会非常明显,最优方案可以通过Set数据结构 + 数组filter方法实现,整体时间复杂度降低到O(n+m):

const companions = [
  {name:"camila", enrollmentId:1},
  {name:"oscar", enrollmentId:2},
  {name:"rupertina", enrollmentId:3}
];
const participants = [7,2,4];

// 先把目标id集合转成Set,查询时间复杂度为O(1)
const participantSet = new Set(participants);
// 直接过滤符合条件的对象即可
const finalResult = companions.filter(item => participantSet.has(item.enrollmentId));

console.log(finalResult) // 输出和原代码完全一致

方案优势

  • 性能更高:Set的has查询是常数时间复杂度,避免了嵌套循环的重复遍历,数据量越大性能优势越明显
  • 代码更简洁语义化:filter方法本身就是用来筛选符合条件的数组元素,可读性更强,不需要手动维护结果数组和循环计数器

小数据量可选简化方案

如果两个数组的长度都很小(均低于100条),也可以直接用Array.includes实现,代码更短,但时间复杂度仍为O(n*m),不适合大数据量场景:

const finalResult = companions.filter(item => participants.includes(item.enrollmentId));

内容的提问来源于stack exchange,提问作者Julio César Rodríguez Pereira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:45:01