JavaScript如何匹配字符串数组值并根据选中工作区过滤受众列表
工作区筛选受众实现方案
核心思路是先把选中的工作区UID提取为集合提升查找效率,再用数组内置方法完成过滤,不需要手动写嵌套循环:
- 提取选中工作区的UID,存入
Set结构,相比数组查询时间复杂度从O(n)降到O(1),数据量越大性能优势越明显 - 先判断是否有选中的工作区,如果没有直接返回全量受众列表
- 过滤受众数组,只要该受众所属的工作区有任意一个UID命中选中集合,就保留该条数据
完整实现代码
// 提取选中的工作区UID集合 const selectedWorkspaceUids = new Set(selectedWorkspaces.map(workspace => workspace.uid)); // 执行过滤逻辑 const filteredAudiences = selectedWorkspaceUids.size === 0 ? audiences : audiences.filter(audience => audience.workspaces.some(uid => selectedWorkspaceUids.has(uid)) );
用到的方法说明
Array.map():遍历选中的工作区对象数组,提取所有UID生成新数组Set:用于存储UID集合,提供O(1)时间复杂度的存在性查询Array.filter():遍历受众列表,返回符合筛选条件的元素组成的新数组Array.some():遍历受众所属的工作区UID数组,只要有一个元素命中选中集合就返回true,提前终止遍历减少性能消耗
内容的提问来源于stack exchange,提问作者Chris McGlynn
相关产品推荐
相关产品推荐

