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

ES6中如何判断数组ID是否存在于另一个数组并校验errorMessages

现有代码的问题

  • 逻辑错误:data2.find((data) => data) 的回调永远返回真值,只会匹配到data2第一个元素的id,仅能命中id为0111的条目,完全不符合需求
  • 缺少核心校验逻辑:没有实现对应条目是否存在有效errorMessages的检查
  • 性能较差:每次遍历data1的元素都要全量遍历一次data2,时间复杂度为O(n*m),数据量大时效率极低

最优实现方案

先对data2做预处理生成id映射表,将查找复杂度降到O(1),整体时间复杂度仅为O(n+m),同时逻辑分层清晰易维护:

// 预处理data2生成映射:key为id,value为对应条目是否存在非空errorMessages
const idCheckMap = new Map(
  data2.map(item => [item.id, item.errorMessages?.length > 0])
)

// 过滤data1:同时满足id存在、对应条目有有效错误信息两个条件
const output = data1.filter(item => idCheckMap.get(item.ids))

console.log("output", output)

如果你仅需要校验errorMessages字段是否存在、不需要判断内容是否非空,把映射值的判断规则改成'errorMessages' in item即可。

如果运行环境不支持Map,也可以用普通对象实现:

const idCheckObj = {}
data2.forEach(item => {
  idCheckObj[item.id] = item.errorMessages?.length > 0
})
const output = data1.filter(item => idCheckObj[item.ids])

方案优势

  • 逻辑完全符合需求:同时覆盖id匹配、错误信息校验两个要求
  • 性能优异:仅需要各遍历一次data1和data2,数据量越大性能优势越明显
  • 可维护性高:校验规则调整仅需要修改映射生成逻辑,不需要改动过滤逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:03