如何将单属性数组对象转换为聚合后的多属性数组对象?
合并分散对象为分组完整对象的实现方案
你需要将由单个键值对对象组成的数组,按每4个一组合并为包含完整字段的对象数组,每组对应company、block、start_date、end_date四个属性。以下是两种实用的JavaScript实现方式:
方法一:循环分组 + Reduce合并
const originalArray = [ { "company": "test" }, { "block": "test" }, { "start_date": "15/08/2023 15:00" }, { "end_date": "15/08/2023 15:00" }, { "company": "test1" }, { "block": "test1" }, { "start_date": "15/08/2023 15:00" }, { "end_date": "15/08/2023 15:00" } ]; const mergedArray = []; // 按每4个元素为一组遍历原数组 for (let i = 0; i < originalArray.length; i += 4) { // 截取当前组的4个元素 const group = originalArray.slice(i, i + 4); // 将组内的单个键值对对象合并为一个完整对象 const mergedObj = group.reduce((acc, curr) => ({ ...acc, ...curr }), {}); mergedArray.push(mergedObj); } console.log(mergedArray);
方法二:单Reduce遍历实现
const originalArray = [ { "company": "test" }, { "block": "test" }, { "start_date": "15/08/2023 15:00" }, { "end_date": "15/08/2023 15:00" }, { "company": "test1" }, { "block": "test1" }, { "start_date": "15/08/2023 15:00" }, { "end_date": "15/08/2023 15:00" } ]; const mergedArray = originalArray.reduce((acc, curr, index) => { // 每4个元素的起始位置(索引0、4、8...)初始化新对象 if (index % 4 === 0) { acc.push({}); } // 将当前对象的键值对合并到结果数组的最后一个对象中 Object.assign(acc[acc.length - 1], curr); return acc; }, []); console.log(mergedArray);
说明
- 两种方法都依赖固定的分组规则:每4个元素对应一个完整对象
- 若每组的字段顺序不固定,但字段完整,方法依然有效,因为对象合并是基于键名的
- 运行后均可得到你需要的目标数组格式
内容的提问来源于stack exchange,提问作者Incognito
相关产品推荐
相关产品推荐

