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

Angular与RxJS中优化对象数组字段匹配更新性能方案咨询

优化方案:用哈希表降低时间复杂度

嵌套循环的时间复杂度是O(n*m),当两个数组各有1000条数据时会产生100万次迭代,性能拉胯。改用哈希表(Map)预存映射关系,可以把时间复杂度降到O(n+m),大幅提升性能。

具体实现步骤:

  1. 先把第二个数组转换成Map,键为匹配字段(比如示例中的newId),值为要更新的目标字段(比如示例中的firstName)
  2. 遍历第一个数组,通过Map直接查找匹配项,完成字段更新

修改后的RxJS代码:

this.api
  .getFirstArray()
  .pipe(
    mergeMap((firstArray) =>
      this._secondApi.getSecondArray().pipe(
        map((secondArray) => {
          // 用Map存储secondArray的映射关系
          const updateMap = new Map<number, string>();
          for (const item2 of secondArray) {
            updateMap.set(item2.newId, item2.firstName);
          }

          // 遍历firstArray完成更新
          for (const item1 of firstArray) {
            const updatedName = updateMap.get(item1.id);
            if (updatedName) {
              item1.name = updatedName;
            }
          }

          return firstArray;
        }),
      ),
    ),
  )
  .subscribe((value) => {
    this.gridApi?.setRowData(value);
  });

代码说明:

  • 针对你的数据示例,我们用newId作为Map的键,firstName作为要更新的值
  • 遍历第一个数组时,每个元素直接通过id查Map,O(1)时间就能找到是否需要更新,避免了嵌套循环的重复遍历
  • 即使第一个数组存在重复id,遍历过程中每个匹配的元素都会被更新,符合你的需求

性能对比:

  • 原方案:n=1000, m=1000 → 1000*1000=1,000,000次迭代
  • 优化后:1000(建Map)+1000(更新数组)=2000次迭代,性能提升500倍

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:20:38