如何在 javascript 中聚合以日期为键的对象

我有一个对象,其键作为日期,格式如下"yyyy-mm-dd"(例如:2020-08-14),每个键的值是具有两个属性(名称和值)的对象数组。


value我需要找到一种方法来获取按nameaccros天分组的密钥总和N。


下面是一个更好理解的例子,原始对象有 4 天的数据,其中一天有一个空数组:


{

  "2020-10-15":[

    {"name":"France","value":20},

    {"name":"United States","value":20},

    {"name":"Italy","value":5},

   ],

 "2020-10-16":[

    {"name":"Germany","value":10},

    {"name":"United States","value":5},

    {"name":"France","value":10}

   ],

  "2020-10-17":[],

   "2020-10-18":[

    {"name":"UK","value":10},

    {"name":"Italy","value":10},

   ]


 }

例如,如果我们希望按 4 天对这些数据进行分组,我们将得到以下结果:


[{"name": "France", "value": 30},

 {"name": "United States", "value": 25},

 {"name": "Italy", "value": 15},

 {"name": "Germany", "value": 10},

 {"name": "UK", "value": 10}]

这是 4 天内具有相同名称值的所有对象的总和。我完全不知道如何实现这一点,我知道可以使用映射来迭代对象键并通过 moment js 进行一些处理,但我不知道如何实现这一点。


翻翻过去那场雪
浏览 100回答 1
1回答

MYYA

您可以使用reduce、forEach和Object.keys方法执行以下操作,const value = {  "2020-10-15":[    {"name":"France","value":20},    {"name":"United States","value":20},    {"name":"Italy","value":5},   ], "2020-10-16":[    {"name":"Germany","value":10},    {"name":"United States","value":5},    {"name":"France","value":10}   ],  "2020-10-17":[],   "2020-10-18":[    {"name":"UK","value":10},    {"name":"Italy","value":10},   ] }let res = Object.keys(value).reduce((prev, curr) => {   value[curr].forEach(item => {      const idx = prev.findIndex(pItem => pItem.name === item.name);      if(idx > -1) {         const newObj = {...prev[idx], value: prev[idx].value + item.value};         prev[idx] = newObj;         return ;      }      prev.push(item);   })   return prev;}, []);console.log(res);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript