You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular TypeScript嵌套for循环优化:如何用map/reduce/filter简化逻辑

优化嵌套循环与比较操作的方案

当然可行,原代码的嵌套循环+重复find查找会带来较高的时间复杂度(O(PRM),P为权限数,R为角色数,M为现有权限角色关联数),我们可以通过预构建映射表结合数组高阶方法(map、reduce)来大幅优化性能和代码简洁度。

优化后的代码

fill() {
  this.rolesPermiAdd = [];
  this.rolPermiRemove = [];
  this.arrayRAndPern.subscribe((data: any) => {
    // 预构建权限-角色的映射集合,将匹配关系转为O(1)查找
    const rolePermiMap = this.rolPermi.reduce((map, item) => {
      const key = `${item.permission}-${item.role}`;
      map.add(key);
      return map;
    }, new Set<string>());

    // 用map生成二维的rolePermiCheck数组
    this.rolePermiCheck = this.permissions.map(permission => 
      this.roles.map(role => 
        rolePermiMap.has(`${permission.code}-${role.code}`)
      )
    );
  });
}

优化说明

  • 预构建映射表:用reduce把rolPermi转成一个Set集合,存储所有已存在的权限code-角色code组合键,后续查找只需O(1)时间,避免了原代码中每次嵌套循环都要遍历整个rolPermi数组的开销。
  • 高阶方法替代嵌套循环:外层用map遍历权限列表,内层再用map遍历角色列表,直接通过映射表判断是否存在关联,一行代码生成对应的布尔值数组,代码更简洁直观。
  • 性能提升:优化后的时间复杂度降到O(M + PR),对比原代码的O(PR*M),在数据量较大时性能提升明显。

内容的提问来源于stack exchange,提问作者nickel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:01:06