如何将按年份分组的嵌套JSON转换为指定数组结构(JavaScript)
JavaScript 实现嵌套JSON转指定数组结构
示例输入
假设你的原始嵌套JSON结构如下:
const originalData = { "2020": { "1": { "Cost": 100, "year": 2020 }, "2": { "Cost": 200, "year": 2020 } }, "2021": { "1": { "Cost": 150, "year": 2021 }, "2": { "Cost": 250, "year": 2021 }, "3": { "Cost": 300, "year": 2021 } } };
期望输出
转换后得到的数组结构:
[ { date: "2020", "1": 100, "2": 200 }, { date: "2021", "1": 150, "2": 250, "3": 300 } ]
实现代码
可以通过遍历对象键值对的方式完成转换:
function transformData(data) { // 将原始对象转为年份-子对象的键值对数组,再逐个处理 return Object.entries(data).map(([year, items]) => { const row = { date: year }; // 遍历每个编号对应的子对象,提取Cost值 Object.entries(items).forEach(([id, item]) => { row[id] = item.Cost; }); return row; }); } // 调用转换函数 const transformedResult = transformData(originalData); console.log(transformedResult);
关键逻辑说明
Object.entries():把对象的键和值转为数组形式,方便遍历处理map():遍历每个年份对应的项,生成数组中的单个元素- 内层
forEach():处理每个年份下的编号数据,把编号作为属性名,Cost值作为属性值,合并到结果对象中
如果需要处理缺失Cost值的情况(比如某些编号没有Cost属性),可以修改赋值逻辑,例如设置默认值:
row[id] = item?.Cost || 0;
内容的提问来源于stack exchange,提问作者user1862965
相关产品推荐
相关产品推荐

