二维数组内各个数组的总和

时间:2015-09-29 21:06:31

标签: javascript arrays sorting sum

在二维数组中加入个体数组的总和时,我的目的就在于此。例如:

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()将根据每个数组中数字的总和(从最高到最低)对数组进行排序。

任何提示都会很棒。提前谢谢!

1 个答案:

答案 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]