javascript - JS。将嵌套循环替换为标准 Array API
问题描述
我有一个比较两个数组以让用户访问页面的案例:
let permitted = false;
const { authorities } = route.data;
const { roles } = user;
for (const role of roles) {
for (const authority of authorities) {
if (role.systemName === authority) {
permitted = true;
break;
}
}
}
用户有一个数组,roles
每个role
有字段systemName
是一个枚举的值UserType
。
authorities
直接是UserType
值数组。
export enum UserType {
User = 'USER_ROLE',
Admin = 'ADMIN_ROLE',
}
如何使用JavaScript 之类的some(...)
标准数组 API 重构这个嵌套循环?indexOf(...)
解决方案
虽然您可以使用嵌套的.some
( O(n ^ 2)
) 来做到这一点,但首先创建一个集合的集合,然后.some
在另一个 ( O(n)
) 上使用会更有效:
const { authorities } = route.data;
const { roles } = user;
const systemNames = new Set(roles.map(({ systemName }) => systemName));
const permitted = authorities.some(
authority => systemNames.has(authority)
);
推荐阅读
- java - JAVA:如何输入 ( < 0 ) 来破解密码?
- javafx - 如何在combox javafx中删除边框
- sql-server - 编码(?)问题通过 pyodbc/Python3 从 SQL Server 获取二进制数据(图像类型列)
- web - 是否应该允许用户硬删除内容?
- html - 为什么 HTML 和 BODY 元素会重叠?
- html - mat-tab-group 超出父 div 宽度
- html - 页脚社交图标不会对齐
- angular - selectedIndex 不适用于多个 mat-tab-group
- javascript - Jquery“rermoveClass”不适用于弹出窗口(使用elementor wordpress完成)
- java - 无法在 Android 11 上以编程方式拍照 - 意图返回已取消状态