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

如何用JavaScript按多属性比较两个对象数组并筛选目标对象

问题修正方案

你的尝试代码逻辑是筛选arrobj1中grp与arrobj2内任意ISACTIVE为true的对象的SERVICE属性相等的条目,但根据你的预期结果,实际需求应该是:筛选arrobj1中同时满足id等于arrobj2里ISACTIVE为true的对象的TASK,且grp等于对应SERVICE的对象。

修正后的代码

方案一:高效匹配(适合大数据量)

先提取arrobj2中活跃对象的TASK-SERVICE映射,再快速匹配:

// 提取arrobj2中ISACTIVE为true的任务与服务映射
const activeTaskServiceMap = new Map(
  arrobj2.filter(item => item.ISACTIVE)
         .map(item => [item.TASK, item.SERVICE])
);

// 筛选arrobj1中符合条件的对象
const result = arrobj1.filter(obj => {
  const matchedService = activeTaskServiceMap.get(obj.id);
  return matchedService && matchedService === obj.grp;
});

方案二:简洁写法(适合小数据量)

直接在filter中嵌套some完成双重条件判断:

const result = arrobj1.filter(obj => 
  arrobj2.some(item => 
    item.ISACTIVE === true && obj.id === item.TASK && obj.grp === item.SERVICE
  )
);

结果验证

运行上述代码后,针对你提供的示例数据,得到的结果与你的预期完全一致:

[
  {
    id:"SetupFS",
    grp:"fs",
    title: "xxx"
  }
]

原代码问题说明

你原来的代码只判断了grp === SERVICE和ISACTIVE === true,会把arrobj1中所有grp="fs"的对象都筛选出来(也就是前两个条目),这和你的预期结果不符,因此需要补充id === TASK的匹配条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:30:57