用 new set() 替换权限数组可将权限判定从 o(n) 降为平均 o(1);支持原子增删、自动去重、批量同步及链式组合判断,提升性能与安全性。

直接用 new Set() 替换权限数组,就能把每次判定从遍历查找降为一次哈希定位。
权限列表转 Set 实例
把原始的字符串数组权限列表,初始化为 Set:
- 旧写法:
const permissions = ['read', 'write', 'admin']; const has = permissions.includes('admin');(O(n)) - 新写法:
const permissionSet = new Set(['read', 'write', 'admin']); const has = permissionSet.has('admin');(平均 O(1)) - 注意:Set 构造时自动去重,重复权限不会影响逻辑,也不需额外校验
动态权限更新更安全
权限常随用户角色实时变化,Set 提供原子级增删,避免数组操作引发的遗漏或索引错误:
- 添加权限:
permissionSet.add('publish'); - 撤销权限:
permissionSet.delete('admin'); - 批量同步(如后端下发新权限集):
permissionSet = new Set(newPermissions); - 不推荐用
filter或splice在数组上反复裁剪——既慢又易出错
组合权限判定可链式表达
多个权限联合校验(如“必须同时有 read 和 edit”),用 Set 操作语义清晰、性能稳定:
- 交集判断:
['read', 'edit'].every(p => permissionSet.has(p)) - 至少一个满足:
['admin', 'owner'].some(p => permissionSet.has(p)) - 排除特定权限:
!permissionSet.has('restricted') - 避免嵌套循环或临时数组拼接,所有操作都维持 O(1) 单次查找开销
重构后,万级权限项下的单次判定耗时基本恒定,不再随权限数量增长而变慢。










