ES2024 新增 Set 的 intersection 等方法,支持直观高效的数据筛选,返回新 Set、天然去重,兼容可迭代对象,适用于权限校验等场景,但需注意浏览器兼容性与输入规范。

JavaScript 中 Set 的 intersection 等新方法(ES2024 标准)让数据筛选变得直观、高效且语义清晰。它们不修改原集合,返回全新 Set,天然去重,适合权限校验、标签匹配、用户分群等常见场景。
直接用 intersection 获取交集
调用 setA.intersection(setB) 即可得到两个 Set 的共同元素,返回一个新 Set:
- 无需手动遍历或 filter + has 组合,代码更简洁
- 支持任意可迭代对象(如数组、Map.keys()、字符串),不局限于 Set
- 示例:const roles = new Set(['admin', 'editor']); const required = new Set(['editor', 'viewer']); const matched = roles.intersection(required); // Set {'editor'}
配合其他集合方法做复合筛选
实际业务中常需组合判断。比如“用户权限是否覆盖某路由所需权限”:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 检查是否满足最低要求:
requiredPerms.isSubsetOf(userPerms)(比every(has)更语义化) - 判断是否有任意权限重叠:
userPerms.isDisjointFrom(routePerms) === false - 获取专属权限(有而对方无):
userPerms.difference(routePerms) - 求对称差(仅一方有):
userPerms.symmetricDifference(routePerms)
注意兼容性与使用边界
这些方法已在 Firefox 127+、Chrome 126+、Safari 17.5+ 原生支持,但旧环境仍需 polyfill 或降级处理:
立即学习“Java免费学习笔记(深入)”;
- 若需支持 IE 或早期浏览器,可用传统 Set + filter + has 模拟 intersection
- 方法参数接受任意可迭代对象,但传入非 Set 时不会自动去重——确保输入本身是干净的
- 交集结果仍是 Set,如需数组形态再转:
Array.from(matched),否则不必多此一步
权限筛选的典型写法
避免把交集转成数组再判断长度,直接用集合关系更高效:
- ✅ 推荐:
if (userPerms.intersection(routePerms).size > 0) { /* 允许访问 */ } - ✅ 更语义:
if (!userPerms.isDisjointFrom(routePerms)) { /* 有交集 */ } - ❌ 不必要:
Array.from(userPerms.intersection(routePerms)).length > 0

















