提问者:小点点

尽可能快地总结一个大型对象数组(200,000+)


上游我支持一个高频率的API调用。在调用之后,我将拥有一个大型对象数组,我需要使用NodeJS对每个对象以尽可能快的速度有效地汇总(添加)为总数。

我确信我可以用一些循环函数来实现这一点,但是我想看看这里的聪明人是否可以找到一个更有效的方法。

[{
samplefield1: 123, 
samplefield2: 345, 
samplefield3: 678, 
samplefield4: 910, 
samplefield5: 111
},
{
samplefield1: 123, 
samplefield2: 345, 
samplefield3: 678, 
samplefield4: 910, 
samplefield5: 111
},
{
samplefield1: 123, 
samplefield2: 345, 
samplefield3: 678, 
samplefield4: 910, 
samplefield5: 111
},
{
samplefield1: 123, 
samplefield2: 345, 
samplefield3: 678, 
samplefield4: 910, 
samplefield5: 111
}.... 
]

所需输出

{
samplefield1total: 1349596065934, 
samplefield2total: 5856960650505, 
samplefield3total: 4344343434343, 
samplefield4total: 44444434342910, 
samplefield5total: 79797696969696
}

作为一个额外的奖励,如果我也能从输入中得到所有记录的计数,就像下面那样添加到数组中,那将是令人惊奇的。。。

奖励挑战输出:

{
samplefield1total: 1349596065934, 
samplefield2total: 5856960650505, 
samplefield3total: 4344343434343, 
samplefield4total: 44444434342910, 
samplefield5total: 79797696969696,
recordcount: 145634
}

但是如果在上面做起来效率不高,我可以在外部用一个简单的array.length语句来做

感谢您能提供的任何帮助


共1个答案

匿名用户

您所能做的最好的事情是不要使用数组助手(它必须为每个简单加法实例分配一个调用帧)。只需要一个简单的for-loop,所以无论如何都需要得到数组长度。

null

const data = [{samplefield1: 123, samplefield2: 345, samplefield3: 678, samplefield4: 910, samplefield5: 111},{samplefield1: 123, samplefield2: 345, samplefield3: 678, samplefield4: 910, samplefield5: 111},{samplefield1: 123, samplefield2: 345, samplefield3: 678, samplefield4: 910, samplefield5: 111},{samplefield1: 123, samplefield2: 345, samplefield3: 678, samplefield4: 910, samplefield5: 111}];

let totals = data[0];
let recordcount = data.length;
let keys = Object.keys(totals);
let keycount = keys.length;

for(let i = 1; i < recordcount; i++) {
  for(let j = 0; j < keycount; j++) {
    totals[keys[j]] += data[i][keys[j]];
  }
}

totals.recordcount = recordcount;

console.log(totals);