如何找到对角线值

时间:2018-09-12 20:32:08

标签: javascript matrix foreach

我想找到一个数组值的总和。数组可能是这样的

const maxtrix = [
    [1, 2, 3, 4],
    [5, 10, 7, 5],
    [8, 11, 15, 9],
    [6, 19, 4, 14],
]

我想在数组中找到类似[4, 7, 11, 6]的值。

我试图这样做,但是我无法组织代码。

这是我写的代码:

const maxtrix = [
    [1, 2, 3, 4],
    [5, 10, 7, 5],
    [8, 11, 15, 9],
    [6, 19, 4, 14],
]

// right - 4, 7, 11, 6

let left = 0

let rowLenth = maxtrix.length - 1;
let colLength = maxtrix[0].length - 1;


maxtrix.forEach((a, r) => {
    a.forEach((b, c) => {
        console.log(maxtrix[r][colLength - c])
    })
})

3 个答案:

答案 0 :(得分:4)

您有正确的想法。将foreach移到列上,因为每行只需要一个值。

尝试一下:

const maxtrix = [
    [1, 2, 3, 4],
    [5, 10, 7, 5],
    [8, 11, 15, 9],
    [6, 19, 4, 14],
]

let colLength = maxtrix[0].length - 1;
maxtrix.forEach((a, r) => {
    // In diagonal values c = r
    let c = r;
    // But we're doing reverse diagonal values
    c = colLength - c;
    console.log(maxtrix[r][c])
})

与您的想法相同,但是我们在对角线条目的定义中使用c = r

答案 1 :(得分:2)

如果您要获取数组中的[4, 7, 11, 6]而不只是将值记录到控制台,则https://github.com/Valve/fingerprintjs2是您想要的工具。 map()为该函数提供了一个索引值,您可以使用该索引值从每一行中获取正确的值:

const matrix = [
    [1, 2, 3, 4],
    [5, 10, 7, 5],
    [8, 11, 15, 9],
    [6, 19, 4, 14],
]
let diagonal = matrix.map((row, index, self) => row[self.length - 1 - index])
console.log(diagonal)

您提到要加价。您可以做几乎相同的事情,但是使用map()来使它们总和:

const matrix = [
    [1, 2, 3, 4],
    [5, 10, 7, 5],
    [8, 11, 15, 9],
    [6, 19, 4, 14],
]
let sumOfDiagonals = matrix.reduce((sum, row, index, self) => sum + row[self.length - index - 1], 0)

console.log(sumOfDiagonals)

答案 2 :(得分:0)

另一种选择是使用 for 循环,从每行的最后一个元素开始递减一个。

var diagonal = (mat) => {
  let j = mat[0].length - 1;
  for (let i = 0; i < mat.length; i++, j--) {
    console.log(mat[i][j]);
  }
};

const maxtrix = [
  [1, 2, 3, 4],
  [5, 10, 7, 5],
  [8, 11, 15, 9],
  [6, 19, 4, 14],
];
diagonal(maxtrix);