簡體   English   中英

查找數組/矩陣的總和和最大值

[英]Finding sums and max.min for an array/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;
        }

任何想法可能是什么問題?

您可以使用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)); 

Array.prototype.forEach()在一行中的解決方案

 var array =[[1,2,3,4], [2,3,4,5], [6,5,4,3], [4,3,2,1]]; var sum = 0; array.forEach(a => a.forEach(b => sum+=b)); document.write(sum); 

for循環中無法訪問for -loop中變量的變量。 你的代碼應該是這樣的:

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

您可以使用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

數組中有數組,因此您可以通過這種方式將函數用於每一行:

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

這不是在javascript中編寫可讀代碼的最佳方式,但我喜歡它=)

該數組是由四個數組組成的數組,每個數組包含四個元素元素。 您想要找到每一行的總和以及所有行的總和。

這個怎么樣?

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM