如何实现可动态迭代条件的JS用户角色列表过滤器
优化方案
核心逻辑用Array.every()替代固定长度的switch分支,可适配任意数量的筛选条件,同时修正了原代码中case4分支索引写错(误写为filter[4],应为filter[3])的潜在问题。
基础实现
和原逻辑完全对齐:无筛选条件时返回所有用户,有筛选条件时仅保留同时持有所有选中角色的用户。
const users = result.data.filter(({ roles }) => { // 无筛选条件时返回全量用户 if (filter.length === 0) return true // 检查用户是否持有所有选中的角色 return filter.every(filterRoleId => roles.some(role => role.id === filterRoleId)) })
注:若你的筛选ID存放在
selections数组中,将代码中的filter替换为selections即可直接使用。
大数据量优化版
如果用户量、角色量级较大,可提前将用户的角色ID转为Set,将查找复杂度从O(n)降到O(1),提升筛选效率:
const users = result.data.filter(({ roles }) => { if (filter.length === 0) return true const userRoleIdSet = new Set(roles.map(role => role.id)) return filter.every(filterId => userRoleIdSet.has(filterId)) })
内容的提问来源于stack exchange,提问作者Micheal Scarn
相关产品推荐
相关产品推荐

