我需要对样本矩阵的元素进行一些计算,它们位于选择性对角线上(这里是对2个分隔的对角线进行求和)。所以我可以轻松地使用for循环:
let matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] ;
let sum1=0;
let sum2 = 0;
for (var i=0;i<matrix.length-1;i++) {
sum1+=matrix[i][i+1];
sum2+=matrix[i+1][i];
}
console.log(sum1,sum2) ;
问题是: 是否可以使用es6函数(如reduce,map等)而不使用for循环?
答案 0 :(得分:0)
是的,可以使用reduce()
方法:
const matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]];
const sum1 = matrix.reduce((acc, x, i) =>
acc + (i < matrix.length - 1
? x[i + 1]
: 0
)
, 0);
const sum2 = matrix.reduce((acc, x, i) =>
acc + (i != 0
? x[i - 1]
: 0
)
, 0);
console.log(sum1,sum2);
请注意,reduce()
和map()
都是在ES5中引入的,而不是ES6。
答案 1 :(得分:0)
您可以使用reduce
var output = matrix.reduce( (a,c,i,ar) => (
a[0] += ar[i][i+1] || 0 , //sum1
a[1] += (ar[i+1] ? ar[i+1][i] : 0), //sum2
a ), //return the accumulator
[0,0]); //initial value
输出是[sum1, sum2]
<强>演示强>
var matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
];
var output = matrix.reduce((a, c, i, ar) => (
a[0] += ar[i][i + 1] || 0, //sum1
a[1] += (ar[i + 1] ? ar[i + 1][i] : 0), //sum2
a), //return the accumulator
[0, 0]); //initial value
console.log(output);
&#13;