javascript - 从现有的 js 对象创建另一个不同格式的 js 对象
问题描述
我有一个函数以这种格式返回一个 js 对象
{ _id: { day: 21, month: 10, year: 2020 },
TOTAL: 9,
A: 4,
B: 1,
C: 1,
D: 2 }
我必须将上述格式格式化为这种格式:
{ modalities:
{ TOTAL: { '21-09-2020': 2, '20-10-2020': 1, '21-10-2020': 8 },
A: { '21-09-2020': 1, '21-10-2020': 4 },
B: { '21-10-2020': 1 },
C: { '21-09-2020': 1, '21-10-2020': 1 },
D: { '20-10-2020': 1, '21-10-2020': 2 } } }
作为初学者,我对格式化没有太多经验,现在我正在考虑用 forEach 来实现它。有没有更好的方法在javascript中做到这一点?
解决方案
let data = [
{
"_id": {
"day": 21,
"month": 10,
"year": 2020
},
"TOTAL": 9,
"XR": 4,
"CT": 1,
"MR": 1,
"MG": 2
},
{
"_id": {
"day": 20,
"month": 10,
"year": 2020
},
"TOTAL": 1,
"XR": 0,
"CT": 0,
"MR": 0,
"MG": 1
},
{
"_id": {
"day": 21,
"month": 9,
"year": 2020
},
"TOTAL": 2,
"XR": 1,
"CT": 0,
"MR": 1,
"MG": 0
}
];
let result = {
modalities: {
TOTAL: {},
XR: {},
CT: {},
MR: {},
MG: {}
}
};
for (let element of data) {
let date = element._id.day + '-' + element._id.month + '-' + element._id.year;
result.modalities.TOTAL[date] = element.TOTAL;
result.modalities.XR[date] = element.XR;
result.modalities.CT[date] = element.CT;
result.modalities.MR[date] = element.MR;
result.modalities.MG[date] = element.MG;
}
console.log('result: ' + JSON.stringify(result));
样本输出
result: {
"modalities": {
"TOTAL": {
"21-10-2020": 9,
"20-10-2020": 1,
"21-9-2020": 2
},
"XR": {
"21-10-2020": 4,
"20-10-2020": 0,
"21-9-2020": 1
},
"CT": {
"21-10-2020": 1,
"20-10-2020": 0,
"21-9-2020": 0
},
"MR": {
"21-10-2020": 1,
"20-10-2020": 0,
"21-9-2020": 1
},
"MG": {
"21-10-2020": 2,
"20-10-2020": 1,
"21-9-2020": 0
}
}
}
推荐阅读
- swift - SwiftUI:创建自己的 TextField 并以编程方式更改内容
- python - 无法在 MacOS 上的 Visual Studio Code 中导入“pygame”
- c# - 我们应该将 Tuple 或 ValueTuple 用于仅引用类型的变量吗?
- python - PySimpleGUI 中不可见列之间的空白
- javascript - 可见时启动 CSS 动画
- bulma - 使用 node-sass 合并两个 css 文件
- reactjs - React 测试库 waitFor 不使用 setTimeout
- c# - DatePicker 在真实设备上无法正常工作
- reactjs - 在没有 webpack 的 React Project 中添加本地图像
- python - 如何在 3 个或更多信号之间在 python 中应用/实现动态时间规整 (DTW) 或快速动态时间规整 (FastDTW)?