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

如何不使用内置/预定义函数按EmpID合并两个对象数组

合并两个对象数组(按EmpID匹配)

需求说明

输入两个对象数组,需按照EmpID字段将对应对象的属性合并,得到包含所有属性的新数组:

输入数组:

var arr1 = [{EmpID:'1',Name:'PB',EmpCode:'10001'},{EmpID:'2',Name:'SS',EmpCode:'10002'}]; 
var arr2 = [{EmpID:'1',Address:'GGN'},{EmpID:'2',Address:'SP-GGN'}];

预期输出:

[{EmpID:'1',Name:'PB',EmpCode:'10001',Address:'GGN'},{EmpID:'2',Name:'SS',EmpCode:'10002',Address:'SP-GGN'}]; 

尝试的代码及问题

我尝试直接拼接数组,但输出仅为两个数组元素的简单堆叠,并未合并对象属性:

function fun(){
    var arr1 = [{EmpID:'1',Name:'PB',EmpCode:'10001'},{EmpID:'2',Name:'SS',EmpCode:'10002'}]; 
    var arr2 = [{EmpID:'1',Address:'GGN'},{EmpID:'2',Address:'SP-GGN'}];

    var arr3= [];
        for(var k=0; k < arr1.length; k++){    
        arr3.push(arr1[k]);
        }

    for(var k=0; k < arr2.length; k++){    
        arr3.push(arr2[k]);
        }
    console.log(arr3);

    
        var arr4 = [...arr1, ...arr2];
        console.log(arr4);
}

fun();

输出结果:

[{"EmpID": "2", "Name": "SS", "EmpCode": "10002"},{EmpID: '2', Name: 'SS', EmpCode: '10002'},{EmpID: '1', Address: 'GGN'},{EmpID: '2', Address: 'SP-GGN'}]

限制条件:不能使用array.filter()、.find()、嵌套循环,仅允许自定义逻辑实现预期合并效果。

解决方案

可以先将arr2转换为以EmpID为键的映射对象,通过键直接匹配对应属性,再遍历arr1完成合并,全程仅用单层循环:

function mergeArrays(arr1, arr2) {
    // 将arr2转为EmpID到Address的映射表
    const addressMap = {};
    for (let i = 0; i < arr2.length; i++) {
        const item = arr2[i];
        addressMap[item.EmpID] = item.Address;
    }

    // 遍历arr1,合并属性
    const result = [];
    for (let i = 0; i < arr1.length; i++) {
        // 复制原对象避免修改原数组元素
        const mergedItem = {...arr1[i]};
        mergedItem.Address = addressMap[mergedItem.EmpID];
        result.push(mergedItem);
    }

    return result;
}

// 测试
var arr1 = [{EmpID:'1',Name:'PB',EmpCode:'10001'},{EmpID:'2',Name:'SS',EmpCode:'10002'}]; 
var arr2 = [{EmpID:'1',Address:'GGN'},{EmpID:'2',Address:'SP-GGN'}];
console.log(mergeArrays(arr1, arr2));

若环境不支持扩展运算符...,可改用Object.assign复制对象:

const mergedItem = Object.assign({}, arr1[i]);

此方法输出符合预期,且未使用受限方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:40:24