javascript - 计算对象属性的总和并将它们存储在数组中
问题描述
所以我有一个 JSON 文件,其中包含世界上所有国家的一些数据。每个国家都是一组对象。数组中的每个对象都有一个 Date 属性、一个 Confirmed 属性等。
{
"Afghanistan": [
{
"date": "2020-1-22",
"confirmed": 5,
"deaths": 0,
"recovered": 0
},
{
"date": "2020-1-23",
"confirmed": 7,
"deaths": 0,
"recovered": 0
}],
"Albania": [
{
"date": "2020-1-22",
"confirmed": 3,
"deaths": 0,
"recovered": 0
},
{
"date": "2020-1-23",
"confirmed": 10,
"deaths": 0,
"recovered": 0
}]
}
在过去的几天里,我试图找到一种方法来创建一个数组,该数组将托管每天所有确诊病例的总和。
所以假设我们有 2 天,我们的数组将有 2 个元素,在第一个元素上,我希望每个国家在 2020 年 1 月 22 日确认的总和,在第二个元素上,每个国家在 2020 年确认的总和-1-23。所以数组应该看起来像这样:
[8 , 17]
这可能很容易做到,但似乎我无法绕过它来寻找解决方案。我使用 reduce 和 map 方法研究了类似的解决方案,但是当我尝试应用到我的案例时,我的大脑变得太困惑了。
解决方案
您可以使用reduce
和来完成forEach
。我还更改了输出格式,而不是返回一个对象的数组。
const records = {Afghanistan: [{date: "2020-1-22",confirmed: 5,deaths: 0,recovered: 0},{date: "2020-1-23",confirmed: 7,deaths: 0,recovered: 0}],Albania: [{date: "2020-1-22",confirmed: 3,deaths: 0,recovered: 0},{date: "2020-1-23",confirmed: 10,deaths: 0,recovered: 0}]};
const res = Object.values(records).reduce((acc, curr) => {
curr.forEach(item => {
acc[item.date] = (acc[item.date] || 0) + item.confirmed;
});
return acc;
}, {})
console.log(res);
推荐阅读
- angular - 修补项目不会更新 Angular 中的有效性
- sendgrid - 使用 MailKit 的 Smtpclient 发送,subjectEncoding 在收到邮件的来源很奇怪。
- python - 使用 python 处理事件中心数据
- php - 如何使用jquery提醒数量增加和数量减少值?
- api - 谷歌防火墙 API 的 PHP 脚本
- mysql - mysql 按查询分组(非常接近)
- scala - 使用过滤器或映射应用转换哪个更快 Scala spark
- linux - CentOS 将文件复制到 /home/ansible-user/ 时没有剩余磁盘空间,但是 admin-vol1 为 100gb
- javascript - 如何在没有一堆 if else 语句的情况下编写这个函数?
- c - 我的数组 printf 循环最后缺少一位数字