查找数组/矩阵的总和和最大值

时间:2016-03-15 19:49:30

标签: javascript arrays matrix

我有这个数组pro-matrix。

var array =[[1,2,3,4],
            [2,3,4,5],
            [6,5,4,3],
            [4,3,2,1]];

我正在尝试找到整个数组以及每一行的总和。这是我查找总金额的函数,但它返回任何东西。

        function sumArray(array) {
          for (
            var
              index = 0,              
              length = array.length,  
              sum = 0;                
              index < length;        
              sum += array[index++]   
          );
          return sum;
        }

任何想法可能是什么问题?

6 个答案:

答案 0 :(得分:6)

您可以使用Array#map()Array#reduce()

function sum(a, b) {
    return a + b;
}

var array = [[1, 2, 3, 4], [2, 3, 4, 5], [6, 5, 4, 3], [4, 3, 2, 1]],
    sums = array.map(function (a) {
        return a.reduce(sum);
    });

document.write('<pre>' + JSON.stringify(sums, 0, 4) + '</pre>');
document.write('total: ' + sums.reduce(sum));

ES6

var add = (a, b) => a + b,
    array = [[1, 2, 3, 4], [2, 3, 4, 5], [6, 5, 4, 3], [4, 3, 2, 1]],
    sums = array.map(a => a.reduce(add));

document.write('<pre>' + JSON.stringify(sums, 0, 4) + '</pre>');
document.write('total: ' + sums.reduce(add));

答案 1 :(得分:2)

使用QVideoSurfaceFormat qsvf(surfaceSize, pixelFormat, QAbstractVideoBuffer::GLTextureHandle); mVideoSurface->start(qsvf); // MyVideoSurface instance

的一行中的解决方案

&#13;
&#13;
Array.prototype.forEach()
&#13;
&#13;
&#13;

答案 2 :(得分:1)

for - 循环中实例化的变量在此循环外部无法访问。你的代码应该是这样的:

function sumArray(array) {
      var sum = 0;
      for (var index = 0;                
          index < array.length;        
          sum += array[index++]   
      );
      return sum;
}

答案 3 :(得分:1)

您可以使用Array.prototype.concat.apply()来展平您的数组,然后减少它以计算所有元素的总和:

var sum = [].concat.apply([], array).reduce(function(a, b) {
    return a + b;
});

console.log(sum); // 52

如果你可以使用ES6语法,使用箭头函数和扩展运算符可以更加优雅:

[].concat(...array).reduce((a, b) => a + b); // 52

答案 4 :(得分:0)

数组中有数组,因此您可以通过这种方式将函数用于每一行:

for (var i = 0, total_sum = 0; i < array.length; total_sum += sumArray(array[i++]));
console.log(total_sum);

这不是在javascript中编写可读代码的最佳方式,但我喜欢它=)

答案 5 :(得分:0)

该数组是一个包含四个数组的数组,每个数组包含四个元素元素。您想要找到每一行的总和以及所有行的总和。

这个怎么样?

function sumArray( array ) {
    var lineTotals = [];
    var grandTotal = 0;

    for ( var i = 0; i < array.length; i++ ) {
        lineTotals.push( 0 );
        for ( var j = 0; j < array[i].length; j++ ) {
        lineTotals[ i ] += array[ i ][ j ];
    }
    grandTotal += lineTotals[ i ];
    }
    return grandTotal;
}