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

带条件使用JavaScript flatMap筛选拥有有效权限的用户ID

解决方案

核心逻辑是按用户ID聚合权限,筛选出至少有1条isAllowed = true权限记录的用户ID即可。

方案1:基于Lodash实现(适配现有代码)

你项目已经引入了Lodash,用这个方案改动最小,可读性高:

// 按userId分组所有权限记录
const userPermissions = _.groupBy(props.settings.managerPermissions, 'userId')
// 过滤出有至少一个有效权限的用户,提取userId
const managers = _.keys(_.pickBy(userPermissions, permissionList => {
  return permissionList.some(item => item.isAllowed)
})).map(Number) // 转数字类型,和你原有输出格式保持一致

方案2:原生JS实现(性能更优)

不需要依赖Lodash,单次遍历即可完成统计,数据量大时效率更高:

const validUserFlag = {}
// 单次遍历完成用户有效性标记
props.settings.managerPermissions.forEach(item => {
  // 已经标记为有效的用户无需重复判断
  if (validUserFlag[item.userId]) return
  validUserFlag[item.userId] = item.isAllowed
})
// 提取所有有效用户ID,转数字类型
const managers = Object.entries(validUserFlag)
  .filter(([_, isValid]) => isValid)
  .map(([userId]) => Number(userId))

两种方案运行后都能得到你期望的输出 [14, 24]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:15:04