为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻翻过去那场雪 2023-08-10 15:27:25
我有一个对象,其键作为日期,格式如下"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 进行一些处理,但我不知道如何实现这一点。
查看完整描述

1 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

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


查看完整回答
反对 回复 2023-08-10
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信