如何根据相同id将array2的nameV2属性合并到array1中?
按ID合并两个数组对象的属性
高效实现方案(推荐)
先将array2转换为以id为键的Map,把查找匹配项的时间复杂度从O(n²)优化到O(n),再遍历array1为对应对象添加nameV2属性:
// 构建array2的ID映射表 const array2IdMap = new Map(array2.map(item => [item.id, item])); // 遍历array1,添加匹配的nameV2属性 array1.forEach(item => { const matchedItem = array2IdMap.get(item.id); if (matchedItem) { item.nameV2 = matchedItem.nameV2; } }); // 此时array1即为期望结果 console.log(array1);
不修改原数组的实现
如果不想改动原array1,可以返回一个新的合并数组:
const array2IdMap = new Map(array2.map(item => [item.id, item])); const mergedArray = array1.map(item => { const matchedItem = array2IdMap.get(item.id); // 展开原对象并添加nameV2属性 return matchedItem ? { ...item, nameV2: matchedItem.nameV2 } : { ...item }; }); console.log(mergedArray);
基础遍历实现(适合小数据量)
如果数组规模很小,直接嵌套遍历也能满足需求:
array1.forEach(item1 => { // 查找array2中相同ID的对象 const matchedItem = array2.find(item2 => item2.id === item1.id); if (matchedItem) { item1.nameV2 = matchedItem.nameV2; } });
内容的提问来源于stack exchange,提问作者Aniruddha
相关产品推荐
相关产品推荐

