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

JavaScript中如何高效将数组对象属性添加到另一数组对象

高效实现数组元素属性同步方案

你的现有代码问题

  1. 重复遍历导致低效:每次forEach循环里都执行array1.map(f => f.id),这会完整遍历array1一遍,时间复杂度变成O(n*m)(n是array2长度,m是array1长度),数据量大时性能很差。
  2. 索引查找错误:array1.indexOf(e["id"])是在array1数组中查找字符串类型的id值,但array1的元素是对象,所以永远返回-1,根本无法定位到对应的元素,自然无法完成属性添加。

正确高效的实现方式

核心思路是先建立array1的id映射表,把查找操作的时间复杂度降到O(1),之后遍历array2时直接通过id快速匹配对应元素,整体时间复杂度为O(n+m),是最优的线性复杂度。

代码实现

// 第一步:建立array1的id到元素的映射,用Map更直观(也可以用普通对象)
const array1Map = new Map();
array1.forEach(item => {
    array1Map.set(item.id, item);
});

// 第二步:遍历array2,同步temp属性
array2.forEach(item => {
    const targetItem = array1Map.get(item.id);
    if (targetItem) {
        targetItem.temp = item.temp;
        // 如果需要同步name(虽然示例中name一致,但如果有不一致的情况可以加上)
        // targetItem.name = item.name;
    }
});

为什么高效

  • 建立映射表只需要遍历array1一次,之后每次查找元素都是O(1)的直接访问。
  • 遍历array2也是一次线性遍历,整体操作没有嵌套循环,性能远优于你之前的实现。
  • 直接修改原array1的元素,完全符合“不使用新数组”的要求,最终array1的结构会和array2一致。

验证结果

执行完上述代码后,array1会变成:

[
    {"name": "a", "id": "1", "temp": "temp1"},
    {"name": "b", "id": "2", "temp": "temp2"},
    {"name": "c", "id": "3", "temp": "temp3"},
    {"name": "c", "id": "4", "temp": "temp4"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:01:22