set去重权限代码标识最简洁高效:直接传入数组自动去重,对象数组需先map提取code再用set;天然保持插入顺序,支持add动态添加和has快速查询,比filter+indexof更优。

用 Set 去重权限代码标识非常直接:把所有权限字符串放进 Set,它会自动去重,再转回数组即可。
创建 Set 并添加权限标识
Set 构造函数接受可迭代对象(如数组),重复值会被自动忽略。
const permissions = ['read', 'write', 'read', 'delete', 'write']; const uniquePermissions = new Set(permissions); console.log([...uniquePermissions]); // ['read', 'write', 'delete']
从对象数组中提取并去重权限字段
实际场景中权限常是对象形式(如 { code: 'edit_user', desc: '编辑用户' }),需先提取 code 字段再用 Set 去重。
const permissionList = [
{ code: 'view_report', desc: '查看报表' },
{ code: 'edit_report', desc: '编辑报表' },
{ code: 'view_report', desc: '重复的查看报表' },
];
const uniqueCodes = [...new Set(permissionList.map(p => p.code))];
console.log(uniqueCodes);
// ['view_report', 'edit_report']
保留首次出现顺序,同时支持动态添加
Set 天然保持插入顺序,适合按原始顺序去重;也可在运行时用 .add() 动态追加权限而不重复。
- 多次调用
set.add('admin')只保留一个 - 后续用
Array.from(set)或[...set]转为数组 - 检查是否存在:
set.has('publish')返回布尔值,比includes更快
和 filter + indexOf 对比更简洁
传统写法需要遍历+查重,而 Set 写法更短、语义清晰、性能更好(尤其数据量大时)。
// 不推荐:易出错、性能差 const deduped = permissions.filter((item, index) => permissions.indexOf(item) === index); // 推荐:简洁、高效、可读性强 const deduped = [...new Set(permissions)];
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











