Set天然适合权限角色编码去重,自动忽略重复值且操作接近O(1);支持add/delete/has/clear等方法实现增删查改,可直接转数组用于前后端交互。

JavaScript 中的 Set 天然适合做权限角色编码去重,因为它自动忽略重复值,且插入、查找时间复杂度接近 O(1)。
用 Set 存储角色编码,自动去重
角色编码(如 "admin"、"editor"、"viewer")通常是字符串,直接作为 Set 元素即可。重复添加同一编码不会改变 Set 内容。
-
创建空 Set:
const roles = new Set(); -
添加角色(重复无影响):
roles.add("admin"); roles.add("editor"); roles.add("admin"); // 只保留一个 "admin" -
转为数组(如需后续遍历或传给后端):
[...roles]或Array.from(roles)
从后端或表单批量导入时去重
常见场景:用户初始权限来自接口返回的数组(可能含重复)、或前端多选框提交的列表。用 Set 构造函数一步去重:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
去重并转回数组:
const uniqueRoles = [...new Set(["admin", "editor", "admin", "viewer"])]; // ["admin", "editor", "viewer"] -
配合解构或 map 处理对象数组(如取 roleCode 字段):
const rawList = [{code: "admin"}, {code: "editor"}, {code: "admin"}];<br>const uniqueCodes = [...new Set(rawList.map(item => item.code))];
动态增删角色时保持唯一性
权限操作不是只读的,常需 toggle(切换)某个角色。Set 提供 has()、add()、delete() 方法,逻辑清晰:
立即学习“Java免费学习笔记(深入)”;
-
添加或移除(类似 toggle):
roles.has("admin") ? roles.delete("admin") : roles.add("admin"); -
清空所有权限:
roles.clear(); -
检查是否拥有某权限(比 includes 更快):
if (roles.has("editor")) { /* 执行编辑操作 */ }
与后端交互前的标准化处理
多数 API 要求权限字段是字符串数组,Set 去重后可直接转换,无需额外过滤逻辑:
-
提交前确保无重复:
fetch("/api/user/roles", { method: "PUT", body: JSON.stringify({ roles: [...roles] }) }); -
服务端返回后更新本地状态(自动合并去重):
const serverRoles = await getRoles();<br>serverRoles.forEach(role => roles.add(role)); // 新增不重复,已存在则忽略

















