如何基于ID匹配将object1的status属性合并到object2中
解决方法:匹配数组对象并添加属性
需求:根据object1的employeeId与object2的Id进行匹配,将object1中的status属性添加到对应的object2对象内。
原始数据:
var object1 = [ { status: 'Complete', employeeId: 1 }, { status: 'Updating', employeeId: 2 }, { status: 'Finished', employeeId: 3 } ]; var object2 = [ { name: 'Ben', Id: 1 }, { name: 'Jim', Id: 2 }, { name: 'Dan', Id: 3 } ];
方法一:遍历+查找(适用于小数据量)
直接遍历object2,对每个对象在object1中找到匹配项并合并属性:
const result = object2.map(item => { const matched = object1.find(obj => obj.employeeId === item.Id); // 合并原对象与匹配到的status,无匹配则保留原对象结构 return { ...item, ...(matched && { status: matched.status }) }; }); console.log(result); // 输出: // [ // { name: 'Ben', Id: 1, status: 'Complete' }, // { name: 'Jim', Id: 2, status: 'Updating' }, // { name: 'Dan', Id: 3, status: 'Finished' } // ]
方法二:构建映射表(适用于大数据量,性能更优)
先将object1转换为以employeeId为键的映射对象,再遍历object2直接取值,避免重复查找:
// 构建status映射表 const statusMap = object1.reduce((map, obj) => { map[obj.employeeId] = obj.status; return map; }, {}); // 给object2添加status属性 const result = object2.map(item => ({ ...item, status: statusMap[item.Id] })); console.log(result); // 输出同方法一
注意点
- 若
object2中存在Id在object1无匹配的情况,方法二中对应的status会是undefined,可根据需求添加默认值,比如status: statusMap[item.Id] || 'Unknown'。 - 方法一时间复杂度为O(n*m),方法二为O(n+m),数据量越大,方法二的性能优势越显著。
内容的提问来源于stack exchange,提问作者noclist
相关产品推荐
相关产品推荐

