如何在javascript中聚合日期为键的对象
我有一个对象,其键作为日期,格式如下如何在javascript中聚合日期为键的对象,javascript,object,momentjs,Javascript,Object,Momentjs,我有一个对象,其键作为日期,格式如下“yyyy-mm-dd”(例如:2020-08-14) 每个键的值是一个具有两个属性(名称和值)的对象数组 我需要找到一种方法来获取键值按名称accrosN天数分组的总和 下面是一个更好理解的示例,原始对象有4天的数据,其中一天有一个空数组: { "2020-10-15":[ {"name":"France","value":20}, {"name&q
“yyyy-mm-dd”
(例如:2020-08-14)
每个键的值是一个具有两个属性(名称和值)的对象数组
我需要找到一种方法来获取键值
按名称
accrosN
天数分组的总和
下面是一个更好理解的示例,原始对象有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天内名称值相同的所有对象的总和。我完全不知道如何实现这一点,我知道可以使用map迭代对象键并通过矩js进行一些处理,但我不知道如何实现这一点。您可以使用,和方法执行以下操作
您可以使用、和方法执行以下操作
以你知道的方式开始:不要尝试使用聪明的
.map
或.entries
等,只需创建一个空数组,启动一个for循环,让你的代码做得更详细,至少对你自己来说是可以理解的。以你知道的方式开始:不要尝试使用聪明的.map
或.entries
等,只需创建一个空数组,开始一个for循环,让你的代码做得更详细,至少对你自己来说是可以理解的。这个代码非常好用。谢谢你,但我不能真正理解它,你能给你的答案添加一些解释吗?我明天会添加解释。与此同时,你可以阅读我提供的链接。这应该足以了解这里发生了什么。这段代码非常有效。谢谢你,但我不能真正理解它,你能给你的答案添加一些解释吗?我明天会添加解释。与此同时,你可以阅读我提供的链接。了解一下这里发生了什么就足够了。
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);