JavaScript如何合并指定结构数组对象?现有方案无效求解决
解决JavaScript合并数组中对象属性的问题
嘿,我明白你的需求了!你手里有一个包含两个对象的数组,一个是员工的费用明细,另一个是items数组对象,想要把它们的属性合并成一个对象,再放到一个数组里。之前用reduce+concat不管用很正常,因为那俩方法主要是用来合并数组元素的,不是合并对象属性的。
这里给你几个简单直接的实现方案:
方案1:对象展开语法(最简洁)
如果你的环境支持ES6+,这个方法最直观:
// 原始数据 const originalData = [ { employeeName: 'វី រឿន', docStudyFee: 415.24, docBusFee: 50, docSaleFee: 10, amount: 475.24 }, { items: [{}, {}, {}] } // 用占位对象代替你实际的[Object] ]; // 合并成目标结构 const mergedResult = [ { ...originalData[0], ...originalData[1] } ]; console.log(mergedResult); // 输出:[{ employeeName: 'វី រឿន', docStudyFee: 415.24, docBusFee: 50, docSaleFee: 10, amount: 475.24, items: [{}, {}, {}] }]
方案2:Object.assign(兼容性更好)
如果需要兼容老环境,用Object.assign也能达到同样效果:
const mergedResult = [ Object.assign({}, originalData[0], originalData[1]) ];
这里第一个空对象是用来避免修改原数据的,如果直接把originalData[0]作为第一个参数,会改变原对象的内容,所以建议传空对象作为初始值。
方案3:处理多个对象的通用写法
如果你的原始数组里可能有不止两个需要合并的对象,用reduce结合Object.assign就可以通用处理:
const mergedResult = [ originalData.reduce((mergedObj, currentObj) => { return Object.assign(mergedObj, currentObj); }, {}) // 初始值为空对象 ];
这个方法会遍历数组里的每一个对象,把它们的属性依次合并到初始的空对象里,最后得到一个包含所有属性的对象,再放到数组中。
为什么之前的reduce+concat没用?
concat是用来拼接数组的,比如把多个数组合并成一个;而reduce如果配合concat,通常是用来扁平化数组或者合并数组元素,但你的需求是合并对象的属性,不是合并数组,所以这俩方法组合起来自然解决不了问题。
内容的提问来源于stack exchange,提问作者phan chanra
相关产品推荐
相关产品推荐

