在二维数组中加入个体数组的总和时,我的目的就在于此。例如:
var arrArrays = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
function sumArray(numberArray) {
var sum = 0;
numberArray.forEach(function(a,b) {
sum = a + b;
});
return sum;
}
函数sumArray可以成功添加&返回一个常规(一维数组)的总和,但是当传递arrArrays时,它返回一个随机值的数组。
我需要它能够返回多个数组在另一个数组中的总和。原因是因为我需要这个下一个函数来调用sumArray():
function sumSort(arrayOfArrays) {
arrayOfArrays.sort(function(a,b) {
var sumArray1 = sumArray(a);
var sumArray2 = sumArray(b);
if (sumArray1 < sumArray2) {
return -1;
} else {
return 0;
}
});
}
从理论上讲,sumSort()将根据每个数组中数字的总和(从最高到最低)对数组进行排序。
任何提示都会很棒。提前谢谢!
答案 0 :(得分:1)
此方法允许您处理任何嵌套深度的数组。首先,你flatten the inner arrays然后像往常一样对它们求和。如果您还希望它处理非嵌套数组,您可以在第一级添加检查,如in this question所示。
var arrs = [[[[1]], [2, 3]], [4, 5, 6], [7, 8, 9]];
//https://stackoverflow.com/a/15030117/1470607
function flatten(arr) {
return arr.reduce(function(flat, arr) {
return flat.concat(Array.isArray(arr) ? flatten(arr) : arr);
}, []);
};
var sums = arrs.map(function(arr) {
return flatten(arr).reduce(function(sum, item) {
return sum + item;
});
}); //[6, 15, 24]