我有一个包含101个值的数组(代表0-100岁的人)。
一次性构建这些聚合数组的最佳快速简单方法是什么:
var input = [55,33,12 .. 98 more]
var output = {
//same as input
i1 = [],
//0-5, 6-10, 11-15 ... 96-100
i5 = [],
//0-10, 11-20, 21-30 ... 91-100
i10 = [],
//0-20, 21-40, 41-60 ... 81-100
i20 = [],
}
旁注:你会按间隔(“i1”,“i5”)或组/元素数量(“g100”,“g20”)命名这些聚合数组 - 更多内容直观的,如果其他程序员遇到这些定义?
答案 0 :(得分:1)
您可以重复使用聚合结果来计算下一个数组。
// sums up each n numbers from the input array
//
function groupSum(inarray, n) {
var outarray = [];
var sum = 0;
for (var i = 0; i < inarray.length; i++) {
sum += inarray[i];
if (i % n == n - 1) {outarray.push(sum); sum = 0;}
}
// add the last element
if (i % n != 0) { outarray.push(sum); }
return outarray;
}
var input = [55, 33, 12, 98, /* more numbers here */ 3, 4, 1, 2, 0, 7];
var output = {};
output.i1 = input;
output.i5 = groupSum(output.i1, 5);
output.i10 = groupSum(output.i5, 2);
output.i20 = groupSum(output.i10, 2);
请注意,正如xanatos所说,性能在这里并不是一个大问题。
PS1:不确定您是否尝试输出对象(如此代码中)或2D数组。
PS2:由于你的第一组总是还有一个元素,你可能需要为这种特殊情况稍微调整一下代码。