使用es6函数进行矩阵计算

时间:2018-02-12 09:46:15

标签: javascript arrays ecmascript-6

我需要对样本矩阵的元素进行一些计算,它们位于选择性对角线上(这里是对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循环?

2 个答案:

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

的数组

<强>演示

&#13;
&#13;
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;
&#13;
&#13;