我有这个数组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;
}
任何想法可能是什么问题?
答案 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
Array.prototype.forEach()
&#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;
}