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