如何结合动态数据源的过滤条件,按属性键值筛选数组项
实现步骤
步骤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
相关产品推荐
相关产品推荐

