首页 > 解决方案 > 计算对象属性的总和并将它们存储在数组中

问题描述

所以我有一个 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 方法研究了类似的解决方案,但是当我尝试应用到我的案例时,我的大脑变得太困惑了。

标签: javascriptarraysjsonobject

解决方案


您可以使用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);


推荐阅读