javascript - 交互和重新组织 JSON 数据
问题描述
我从端点接收到的数据不足以在表格中显示,直到进行一些更改。这是我接收示例数据的方式:
const data = [
{
Year: 2017,
OriginalIntBalanceOverdue: 0.0,
DefaultPrincipalInt: 749.0,
OriginalPrincipal: 127850.0
},
{
Year: 2018,
OriginalIntBalanceOverdue: 0.0,
DefaultPrincipalInt: 1543.0,
OriginalPrincipal: 182566.0
},
{
Year: 2019,
OriginalIntBalanceOverdue: 0.0,
DefaultPrincipalInt: 30.0,
OriginalPrincipal: 108000.0
}
];
但是数据应该按除年份之外的所有这些重复属性进行分组。这是它的样子:
const dataDesired = [
{
item: "OriginalIntBalanceOverdue",
"2017": 0.0,
"2018": 0.0,
"2019": 0.0
},
{
item: "DefaultPrincipalInt",
"2017": 749.0,
"2018": 1543.0,
"2019": 200
},
{
item: "OriginalPrincipal",
"2017": 127850.0,
"2018": 30.0,
"2019": 108000.0
}
];
我添加了代码沙盒以更轻松地实施解决方案:
https://codesandbox.io/s/vibrant-jones-sgy4u?file=/src/App.js:697-1016
我尝试了几种方法
Object.keys(data).forEach(key=>{
....
...
}
但我没有成功。
解决方案
你可以试试这个。在这里,我假设您始终Year
存在该字段。
const data = [{ Year: 2017, OriginalIntBalanceOverdue: 0.0, DefaultPrincipalInt: 749.0, OriginalPrincipal: 127850.0}, { Year: 2018, OriginalIntBalanceOverdue: 0.0, DefaultPrincipalInt: 1543.0, OriginalPrincipal: 182566.0}, { Year: 2019, OriginalIntBalanceOverdue: 0.0, DefaultPrincipalInt: 30.0, OriginalPrincipal: 108000.0}];
const res = {};
data.forEach(item => {
let year = null;
Object.entries(item).forEach(([key, value]) => {
if (key === 'Year') year = value;
else {
if (res[key] === undefined) {
res[key] = {}; res[key].item = key;
}
res[key][year] = value;
}
});
});
const result = Object.values(res);
console.log(result);
.as-console-wrapper {min-height: 100%!important; top: 0}
推荐阅读
- python - 如何让机器人在每个命令中给出不同的值
- python - 访问 JSON 对象中的元素
- php - 有没有办法减少循环次数
- php - set_exception_handler 未捕获类异常
- node.js - 在 node_modules/pino/pino.js:9 const { assertDefaultLevelFound, mappings, genLsCache } = require('./lib/levels') 中出现错误
- php - 使用 New Relic Infrastructure 代理的多行应用程序日志解析器
- python - Pandas Dataframe 3D 曲面图
- sql - 我在写游标时收到错误 ORA-01001 无效游标显示偶数条记录
- javascript - 如何在JSX中仅链接一个.map数组的一个元素
- c# - 服务文件供下载。浏览器忽略文件名并使用“file.nothing”代替