我想找到一个数组值的总和。数组可能是这样的
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])
})
})
答案 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);