gpt4 book ai didi

javascript - ES6 按数组中的对象属性求和

转载 作者:行者123 更新时间:2023-11-28 12:14:00 25 4
gpt4 key购买 nike

我试图按日期对单位值求和,并创建一个没有重复日期的新数组。例如,我想计算2015-12-04 00:01:00的总计。该日期在以下数据中出现了 2 次,其值为 56,即:

[{date: '2015-12-04 00:01:00', unit: 11}, ... etc]

我尝试过arr = results.map(x => x.unit).reduce((a,c) => a + c)但它只返回单个值,而不是数组。

results = [ { unit: 5, date: '2015-12-04 00:01:00' },
{ unit: 10, date: '2015-12-04 00:01:00' },
{ unit: 5, date: '2015-12-04 00:31:00' },
{ unit: 9, date: '2015-12-04 00:31:00' },
{ unit: 5, date: '2015-12-04 01:01:00' },
{ unit: 10, date: '2015-12-04 01:01:00' },
{ unit: 10, date: '2015-12-04 01:31:00' },
{ unit: 5, date: '2015-12-04 01:31:00' },
{ unit: 10, date: '2015-12-04 02:01:00' },
{ unit: 5, date: '2015-12-04 02:01:00' },
{ unit: 5, date: '2015-12-04 02:31:00' },
{ unit: 9, date: '2015-12-04 02:31:00' },
{ unit: 5, date: '2015-12-04 03:01:00' },
{ unit: 9, date: '2015-12-04 03:01:00' },
{ unit: 5, date: '2015-12-04 03:31:00' },
{ unit: 10, date: '2015-12-04 03:31:00' },
{ unit: 10, date: '2015-12-04 04:01:00' },
{ unit: 5, date: '2015-12-04 04:01:00' }];

arr = results.map(x => x.unit).reduce((a,c) => a + c);
console.log(arr);

最佳答案

您可以将数据减少到字典,然后将其映射到数组,如下所示

results = [ { unit: 5, date: '2015-12-04 00:01:00' },
{ unit: 10, date: '2015-12-04 00:01:00' },
{ unit: 5, date: '2015-12-04 00:31:00' },
{ unit: 9, date: '2015-12-04 00:31:00' },
{ unit: 5, date: '2015-12-04 01:01:00' },
{ unit: 10, date: '2015-12-04 01:01:00' },
{ unit: 10, date: '2015-12-04 01:31:00' },
{ unit: 5, date: '2015-12-04 01:31:00' },
{ unit: 10, date: '2015-12-04 02:01:00' },
{ unit: 5, date: '2015-12-04 02:01:00' },
{ unit: 5, date: '2015-12-04 02:31:00' },
{ unit: 9, date: '2015-12-04 02:31:00' },
{ unit: 5, date: '2015-12-04 03:01:00' },
{ unit: 9, date: '2015-12-04 03:01:00' },
{ unit: 5, date: '2015-12-04 03:31:00' },
{ unit: 10, date: '2015-12-04 03:31:00' },
{ unit: 10, date: '2015-12-04 04:01:00' },
{ unit: 5, date: '2015-12-04 04:01:00' }]

// first make an object with {date: unit} value as such
const newResults = results.reduce((acc, item) => ({
...acc,
[item.date]: (acc[item.date] || 0) + item.unit
}) , {})

console.log(newResults)
/*
{
"2015-12-04 00:01:00": 15,
"2015-12-04 00:31:00": 14,
"2015-12-04 01:01:00": 15,
"2015-12-04 01:31:00": 15,
"2015-12-04 02:01:00": 15,
"2015-12-04 02:31:00": 14,
"2015-12-04 03:01:00": 14,
"2015-12-04 03:31:00": 15,
"2015-12-04 04:01:00": 15
}
*/

// now if you want array representation for this you can do

const finalResult = Object.keys(newResults).map(key => ({date: key, unit: newResults[key]}))

console.log(finalResult)
/*
[
{
"date": "2015-12-04 00:01:00",
"unit": 15
},
{
"date": "2015-12-04 00:31:00",
"unit": 14
},
{
"date": "2015-12-04 01:01:00",
"unit": 15
},
{
"date": "2015-12-04 01:31:00",
"unit": 15
},
{
"date": "2015-12-04 02:01:00",
"unit": 15
},
{
"date": "2015-12-04 02:31:00",
"unit": 14
},
{
"date": "2015-12-04 03:01:00",
"unit": 14
},
{
"date": "2015-12-04 03:31:00",
"unit": 15
},
{
"date": "2015-12-04 04:01:00",
"unit": 15
}
]
*/

关于javascript - ES6 按数组中的对象属性求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53754524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com