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

如何结合动态数据源的过滤条件,按属性键值筛选数组项

实现步骤

步骤1:合并生成完整筛选关键词数组

首先把arrayOne中type为1的分类标签、ticketIds中的ticketId合并为统一的筛选数组:

// 提取零食柜分类标签(type=1)
const type1Labels = arrayOne.filter(item => item.type === 1).map(item => item.label);
// 提取需要筛选的ticketId(对应type=2)
const type2TicketIds = ticketIds.ticketIds.map(item => item.ticketId);
// 合并得到最终筛选关键词数组
const mapKeyToArray = [...type1Labels, ...type2TicketIds];

步骤2:过滤mainObject中的嵌套数组

遍历arrayInObject的每个分组,过滤分组内data数组中符合条件的项,同时剔除过滤后无有效数据的空分组:

const filteredMainObject = {
  // 保留mainObject的其他原有属性
  ...mainObject,
  arrayInObject: mainObject.arrayInObject
    .map(group => {
      // 筛选当前分组下满足「type在关键词数组 或 ticketId在关键词数组」的项
      const filteredData = group.data.filter(item => 
        mapKeyToArray.includes(item.type) || mapKeyToArray.includes(item.ticketId)
      );
      // 仅保留有有效数据的分组
      return filteredData.length ? {...group, data: filteredData} : null;
    })
    // 移除空分组
    .filter(Boolean)
};

性能优化建议

如果筛选关键词数量较多,可以把mapKeyToArray转为Set类型,将查找复杂度从O(n)降低到O(1):

const filterSet = new Set(mapKeyToArray);
// 过滤时改用Set的has方法判断
const filteredData = group.data.filter(item => 
  filterSet.has(item.type) || filterSet.has(item.ticketId)
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:54:03