JavaScript数组对象解构 拆分多字段对象为单月条目问题
问题根因
你的代码存在3个问题:
- 入参不匹配:你传入的
obj是对象数组,但函数fn的入参设计为接收单个对象做解构,直接传数组无法正确遍历所有原始条目 - 字段丢失:使用
Object.values(rest)仅获取了月份对应的数值,丢失了Jan/Feb/Mrz这类月份键名,最终输出的字段固定为Month,不符合预期结构 - 语法错误:函数定义末尾多写了一个多余的
}),会直接触发语法报错,无法正常运行
可运行的正确实现
// 原始数据源 const rawData = [ { "Area": "Werk Produktivität [%] - Target", "Jan": 86.21397507374327, "Feb": 86.0570021973368, "Mrz": 88.70898346258058, "Apr": 85.29801908413164, "May": 85.07431241640211 }, { "Area": "Werk Produktivität [%] - Actual", "Jan": 84.17054711398421, "Feb": 83.80826026601528, "Mrz": 84.11553769971036, "Apr": 83.76460916731, "May": 82.69773876702813 } ] const formatData = (dataList) => { // flatMap遍历原始数组,同时将处理后的二级数组拍平为一维 return dataList.flatMap(item => { const { Area, ...monthMap } = item // 同时遍历月份的键和值,动态生成对应字段 return Object.entries(monthMap).map(([month, value]) => ({ Area, [month]: value })) }) } // 得到最终结果 const result = formatData(rawData)
实现逻辑说明
- 用
flatMap替代普通map,避免处理完单条Area数据后生成嵌套数组,直接输出你需要的一维数组结构 - 解构单条数据时,分离固定的
Area字段和存储各月份数据的剩余对象 - 用
Object.entries替代Object.values,同时拿到月份名称和对应数值,通过ES6计算属性语法[month]动态生成月份字段,完全匹配目标格式 - 运行后最终输出长度为10的数组,结构和你给出的示例完全一致
内容的提问来源于stack exchange,提问作者Mr-Robot
相关产品推荐
相关产品推荐

