如何将含重复字段的数组对象转换为单个合并对象?
实现方案
用JavaScript的Array.reduce()方法就能完成这个合并操作,核心逻辑是把name和type作为唯一标识分组,将同组的car、speed分别归集为数组:
通用代码(支持多组不同name/type的情况)
const input = [ { "name": "name1", "type": "type1", "car": "car1", "speed": 1 }, { "name": "name1", "type": "type1", "car": "car2", "speed": 2 } ]; // 分组合并 const grouped = input.reduce((result, item) => { const key = `${item.name}-${item.type}`; if (!result[key]) { result[key] = { name: item.name, type: item.type, car: [], speed: [] }; } result[key].car.push(item.car); result[key].speed.push(item.speed); return result; }, {}); // 取出合并后的单个对象(如果只有一组的话) const merged = Object.values(grouped)[0]; console.log(merged);
简化代码(仅当所有项的name/type完全相同时)
如果确定输入里所有对象的name和type都一致,直接这么写更省事:
const merged = { name: input[0].name, type: input[0].type, car: input.map(i => i.car), speed: input.map(i => i.speed) }; console.log(merged);
输出结果
运行后都会得到目标结构:
{ "name": "name1", "type": "type1", "car": ["car1", "car2"], "speed": [1, 2] }
内容的提问来源于stack exchange,提问作者hdevtr
相关产品推荐
相关产品推荐

