如何合并两个JavaScript数组生成含子数组的目标对象数组
解决方案
你可以通过分组+合并的方式实现需求,具体代码如下:
const array1 = [ {master:'1',total:123,price:34}, {master:'1',total:323,price:45}, {master:'2',total:555,price:22} ]; const array2 = [ {master:'1',quantity:10}, {master:'2',quantity:20}, {master:'3',quantity:30} ]; // 1. 按master字段分组array1,存储对应的子项集合 const masterChildMap = new Map(); array1.forEach(item => { const { master, total, price } = item; // 若当前master未在Map中,初始化空数组 if (!masterChildMap.has(master)) { masterChildMap.set(master, []); } // 将当前项的total和price存入对应分组 masterChildMap.get(master).push({ total, price }); }); // 2. 遍历array2,合并对应的子项数组 const result = array2.map(item => { const mergedObj = { ...item }; // 如果当前master存在对应的子项,添加child属性 if (masterChildMap.has(item.master)) { mergedObj.child = masterChildMap.get(item.master); } return mergedObj; }); console.log(result);
代码说明
- 第一步用
Map对array1做分组,把每个master对应的total和price整理成数组,后续查找子项的效率更高。 - 第二步遍历array2的每个元素,先复制原对象的属性,再检查当前
master是否有对应的子项集合,如果有就添加child属性,最终得到目标结构。
内容的提问来源于stack exchange,提问作者Gajini
相关产品推荐
相关产品推荐

