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

如何实现可动态迭代条件的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:36:03