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

如何获取嵌套数组中type=1/2的权限对象交集,不使用显式循环

正确实现代码

// 兼容数组为空的边界情况
const outArr = arr.length ? arr[0].auths
  // 过滤仅保留type为1、2的权限
  .filter(auth => [1, 2].includes(auth.type))
  // 校验当前权限是否存在于所有子项的auths数组中
  .filter(auth => arr.every(item => 
    item.auths.some(subAuth => subAuth.authId === auth.authId)
  )) : []

实现逻辑

  • 取数组第一个元素的auths作为比对基准,交集元素必然存在于所有集合的首个元素中,无需全量遍历所有权限项
  • 第一轮过滤剔除type不符合要求的权限项,减少后续比对计算量
  • 第二轮过滤通过every方法校验权限在所有子项中是否都存在,通过唯一标识authId匹配,规避对象引用类型无法直接判等的问题
  • 全程仅使用数组高阶函数,无显式for/while循环,符合要求

原有写法错误说明

  • 第一种写法:直接用includes判断对象是否存在,对象属于引用类型,即使属性完全一致的不同对象也会返回false,同时arr.map(p=>p.auths)得到的是二维数组,比对逻辑本身不成立
  • 第二种写法:_map是各个子项auths组成的二维数组,直接解构authId会得到undefined,比对逻辑完全偏离需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:57:03