gpt4 book ai didi

javascript - 逐行对对象组中的每一行求和

转载 作者:行者123 更新时间:2023-12-01 02:37:26 25 4
gpt4 key购买 nike

我需要对分钟seconds_left求和并按id_project分组。

0: {id_project: 2, minutes: 12, seconds_left: NaN}
1: {id_project: 3, minutes: 15, seconds_left: 11}
2: {id_project: 4, minutes: 0, seconds_left: 11}
3: {id_project: 5, minutes: 0, seconds_left: 2}
4: {id_project: 0, minutes: 0, seconds_left: NaN}
5: {id_project: 1, minutes: 0, seconds_left: NaN}
6: {id_project: 4, minutes: 200, seconds_left: 6}
7: {id_project: 6, minutes: 43, seconds_left: NaN}
8: {id_project: 5, minutes: 100, seconds_left: NaN}
9: {id_project: 2, minutes: 123, seconds_left: NaN}
10: {id_project: 3, minutes: 454, seconds_left: NaN}
11: {id_project: 2, minutes: 89, seconds_left: NaN}
12: {id_project: 5, minutes: 23, seconds_left: NaN}
13: {id_project: 4, minutes: 0, seconds_left: NaN}
14: {id_project: 4, minutes: 11, seconds_left: NaN}
15: {id_project: 3, minutes: 66, seconds_left: NaN}
16: {id_project: 1, minutes: 676, seconds_left: NaN}

我想到了map&reduce,但是我做不到。

有办法解决我的问题吗?

感谢您的回答:)

最佳答案

首先,在执行之前放弃 NaN 或将它们转换为 0,否则算术都将具有 NaN 值。现在这就是我所做的:我创建了一个函数,将数组映射到具有唯一项目 ID 的新对象,其中每个对象都有分钟和秒的总和:

var arr = [
{ id_project: 2, minutes: 12, seconds_left: 1 },
{ id_project: 3, minutes: 15, seconds_left: 11 },
{ id_project: 4, minutes: 0, seconds_left: 11 },
{ id_project: 5, minutes: 0, seconds_left: 2 },
{ id_project: 0, minutes: 0, seconds_left: 2 },
{ id_project: 1, minutes: 0, seconds_left: 3 },
{ id_project: 4, minutes: 200, seconds_left: 6 },
{ id_project: 6, minutes: 43, seconds_left: 3 },
{ id_project: 5, minutes: 100, seconds_left: 3 },
{ id_project: 2, minutes: 123, seconds_left: 10 },
{ id_project: 3, minutes: 454, seconds_left: 2 },
{ id_project: 2, minutes: 89, seconds_left: 2 },
{ id_project: 5, minutes: 23, seconds_left: 3 },
{ id_project: 4, minutes: 0, seconds_left: 4 },
{ id_project: 3, minutes: 66, seconds_left: 5 },
{ id_project: 1, minutes: 676, seconds_left: 5 }
];

var _flatten = function (arr) {
var struct = {}; // We'll use a new flattened structure.
var len = arr.length;
for (var i = 0; i < len; i++) {
var pID = arr[i].id_project;
if (undefined !== struct[pID] && null !== struct[pID]) {
// Already assigned. Sum minutes and seconds to already existing values.
struct[pID].sum =
struct[pID].sum +
(arr[i].minutes * 60) +
arr[i].seconds_left;
}
else {
// Current project ID has not been assigne to new structure. Assign.
struct[pID] = { sum: (arr[i].minutes * 60) + arr[i].seconds_left };
}
}
return struct;
}

输出(总和以秒为单位):

_flatten(arr);

0 : {sum: 2}
1 : {sum: 40568}
2 : {sum: 13453}
3 : {sum: 32118}
4 : {sum: 12021}
5 : {sum: 7388}
6 : {sum: 2583}

关于javascript - 逐行对对象组中的每一行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47792628/

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