javascript - 在 JavaScript 中重构 JSON?
问题描述
我从服务器收到一个 JSON,比如 ExampleA,但我需要它像 ExampleB,我尝试了很多东西,比如拼接、推送、传播运算符,但无法实现我的目标,似乎我过度嵌套了结构。示例A:
[
{
"year": 2017,
"Setor": {
"6": {
"ID Sector": 7,
"revenue": 5555555
},
"7": {
"ID Sector": 10,
"revenue": 5555555
}
}
},
{
"year": 2018,
"Setor": {
"8": {
"ID Sector": 7,
"revenue": 7777777
},
"9": {
"ID Sector": 10,
"revenue": 7777777
}
}
}
]
示例B:
[
{
"7": 5555555,
"year": 2017,
"10": 5555555,
},
{
"7": 7777777,
"year": 2018,
"10":7777777
}
]
如您所见,我想要一个 JSON,其中每个数组都有一个“年份”,扇区的 id 作为“索引”,其值作为收入。
编辑:抱歉没有包括我的代码,这是我尝试的最后一件事:
var Obj=[];
this.data.items.forEach((value,index,array)=>{
var data = value.data;
var arraySectorsData =[];
var actualYear = {year:data.year};
for(var sector in data.Setor){
var revenue = {[data.Setor[sector]['ID Sector']]:data.Setor[sector].revenue};
arraySectorsData.splice(0, 0, revenue);
}
arraySectorsData.splice(0, 0, actualYear);
Obj[index]=[...arraySetoresDados];
});
这就是我得到的:
[
[
{
"year": 2017
},
{
"7": 5555555
},
{
"10": 5555555
}
],
[
{
"year": 2018
},
{
"7": 7777777
},
{
"10": 7777777
}
]
]
解决方案
一种解决方案是使用Array.map()将元素映射到新对象。为了创建新对象,我们使用Object.assign()、Object.values()和Array.reduce():
const input = [
{
"year": 2017,
"Setor": {
"6": {"ID Sector": 7, "revenue": 5555555},
"7": {"ID Sector": 10, "revenue": 5555555}
}
},
{
"year": 2018,
"Setor": {
"8": {"ID Sector": 7, "revenue": 7777777},
"9": {"ID Sector": 10, "revenue": 7777777}
}
}
];
let res = input.map(
({year, Setor}) => Object.assign(
{year},
Object.values(Setor).reduce(
(acc, o) => (acc[[o["ID Sector"]]] = o.revenue, acc),
{}
)
)
);
console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
推荐阅读
- asp.net-mvc - 后退按钮上的间歇性 iframe CORS 错误
- c++ - 将2个字符转换为字符串
- javascript - 如何将十进制转换为十六进制,以便结果是数字而不是字符串?
- php - 在 PHP 中,如何从同一函数内的单独内部函数中调用内部函数?
- javascript - Javascript 在按钮单击时显示错误
- codenameone - IOS13.4 上的 BrowserComponent WKWebView 或 UIWebWiew 挂在“executeAndReturnString”上
- python - 关于python模块导入的问题
- swiftui - 如何在 SwiftUI 中获取不同视图的帧(大小和坐标)?
- r - 如何使用向量类型的列创建一个小标题?
- python - 如何使用 Python PPTX 将上标/下标文本添加到 Powerpoint?