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

如何对比两个对象数组,筛选出arr1中stage匹配arr2的元素

数组元素跨集合按stage筛选的实现方案

需求说明

筛选数组arr1中所有stage值与数组arr2中任意元素stage值相同的元素。

原代码问题分析

你当前的实现是通过索引对应比较两个数组的stage值:

const changedObjects = Object.keys(arr1).filter(index => arr1[index].stage === arr2[index].stage).map(index => arr1[index]);

这种逻辑仅会匹配同索引位置下stage值相同的元素,无法满足“匹配arr2中任意元素stage”的需求,因此得不到所有stage为Open的元素。

正确实现方案

高效实现方式(推荐)

先提取arr2中所有stage值存入Set(查询效率为O(1)),再遍历arr1筛选符合条件的元素:

// 提取arr2中所有有效的stage值
const validStages = new Set(arr2.map(item => item.stage));

// 筛选arr1中stage存在于validStages的元素
const changedObjects = arr1.filter(item => validStages.has(item.stage));

原理说明

  1. arr2.map(item => item.stage)生成包含arr2所有stage值的数组,再通过Set自动去重(即使有重复stage也不影响筛选逻辑)。
  2. arr1.filter(item => validStages.has(item.stage))遍历arr1的每个元素,检查其stage是否在有效集合中,符合条件的元素会被保留。

验证结果

按此代码执行后,changedObjects会包含arr1中所有stage为Open(arr2中存在该stage)和Closed Won(arr2中存在该stage)的元素,即arr1的全部5个元素。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:31:11