javascript - React JS如何用日期和数字转换这个对象数组?
问题描述
我有一个 React 组件,它从 get 调用中提取 JSON 数据,我需要重新格式化它(在数组操作方面我仍然是新手)。这是初始返回的 JSON:
{
"metrics": {
"2018-12-26 18:00:00": {
"20": 451,
"30": 48
},
"2018-12-26 19:00:00": {
"20": 165
},
"2018-12-27 00:00:00": {
"20": 177,
"30": 8
},
"2018-12-27 01:00:00": {
"20": 220
},
"2018-12-27 02:00:00": {
"20": 220
},
"2018-12-27 03:00:00": {
"20": 177,
"30": 8
},
"2018-12-27 04:00:00": {
"20": 220
},
"2018-12-28 00:00:00": {
"20": 93
},
"2018-12-28 01:00:00": {
"20": 76
},
"2018-12-28 02:00:00": {
"20": 76
},
"2018-12-28 03:00:00": {
"20": 57
},
"2018-12-28 04:00:00": {
"20": 76
},
"2018-12-28 15:00:00": {
"20": 130,
"30": 10
}
}
}
我需要将它分成单独的日期并将“20”和“30”数字加在一起,这样每个日期我都会得到这样的结果:
"2018-12-26": {
"20": total number here,
"30": total number here
}
我知道这将涉及 Object.keys 并且可能会破坏,但我进展不快。任何帮助将不胜感激。
解决方案
你可以这样做
所以这里的想法是首先创建一个empty object
来存储我们的final output
. 现在我们将遍历给定对象的所有键,并检查该键是否已经存在,output object
如果不是,我们将相应的添加key's value
到输出对象中,而不是在 中创建新属性output object
。
let data = { "metrics": { "2018-12-26 18:00:00": {"20": 451, "30": 48 },"2018-12-26 19:00:00": { "20": 165 }, "2018-12-27 00:00:00": { "20": 177, "30": 8 }, "2018-12-27 01:00:00": { "20": 220 }, "2018-12-27 02:00:00": { "20": 220 }, "2018-12-27 03:00:00": { "20": 177, "30": 8 }, "2018-12-27 04:00:00": { "20": 220 }, "2018-12-28 00:00:00": { "20": 93 }, "2018-12-28 01:00:00": { "20": 76 },"2018-12-28 02:00:00": { "20": 76 }, "2018-12-28 03:00:00": { "20": 57 }, "2018-12-28 04:00:00": { "20": 76 }, "2018-12-28 15:00:00": { "20": 130, "30": 10 }}}
let op = {}
for(let key in data['metrics']){
let temp= new Date(key);
let fullDate = temp.getFullYear()+'-'+temp.getMonth()+'-'+temp.getDate();
if(op[fullDate]){
for(let val in data['metrics'][key])
{
if(op[fullDate][val])
op[fullDate][val] += data['metrics'][key][val]
else op[fullDate][val] = data['metrics'][key][val]
}
} else {
op[fullDate] = {...data['metrics'][key]};
}
}
console.log(op);
推荐阅读
- python - 如何加快 sympy 中非常大的多项式的扩展?
- jenkins-plugins - 如何修复:bitbucket-pullrequest-builder-plugin SSLPeerUnverifiedException 错误
- java - 如何从通用链表中正确删除一个节点?
- microservices - 设计用于预订机票的 REST API 微服务
- mysql - 如何在mysql中对一个值进行多次检查
- php - 正则表达式识别从公元 1000 年之前到公元 2000 年之后的年份
- angular - 可观察数组的可观察对象?
- c++ - 递归C++字母顺序函数重复返回相同的值
- odoo-8 - Odoo:res.company 中的 company_id 在获取数据模型到控制器时显示非存储字段
- java - 在java中将多种数据类型存储到一个数组/表的最佳方法