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

如何基于参考数组过滤含嵌套数组属性的对象数组

数组交叉匹配过滤实现方案

原代码失效原因

你之前使用的 planning.filter(item => checked.includes(item.equipe)) 无法达到预期效果,核心是对includes方法的匹配规则认知偏差:
includes 方法用于检查传入的参数是否为目标数组的直接一级元素。这里传入的item.equipe本身是一个嵌套子数组,而checked数组存储的是字符串格式的组ID,二者结构不匹配,因此永远无法命中匹配条件。

可直接落地的实现代码

基础通用写法(适配中小数据量)

通过Array.some方法遍历当前计划项的equipe子数组,只要任意一个组ID存在于checked选中列表中,就保留该计划项:

const filteredPlanning = planning.filter(item => {
  return item.equipe.some(teamId => checked.includes(teamId))
})

用你提供的测试数据验证执行逻辑:

  • 计划项{ id: '1', equipe: [ '1', '2' ] }:equipe中的'1'存在于checked数组,予以保留
  • 计划项{ id: '2', equipe: [ '1' ] }:equipe中的'1'存在于checked数组,予以保留
  • 计划项{ id: '3', equipe: [ '2', '3' ] }:equipe中的所有元素均不存在于checked数组,予以过滤
    最终输出的结果和你预期的目标数组完全一致。

性能优化写法(适配大数据量场景)

如果planning条目数达到百条以上,可提前将checked数组转为Set结构,把单次匹配的时间复杂度从O(n)降至O(1),减少重复遍历的性能开销:

// 提前构建选中集合,避免每次匹配重复遍历checked数组
const checkedTeamSet = new Set(checked)
const filteredPlanning = planning.filter(item => {
  return item.equipe.some(teamId => checkedTeamSet.has(teamId))
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 08:27:00