如何获取数组中的对角线值?



我正在尝试编写一个程序,该程序采用 3 行 3 列的对角线值。

数组本身是:

[4, 2, 5] 
[1, 8, 3] 
[4, 3, 9]

。输出应该是:

[4, 8, 9]

或者相反:

[5, 8, 4]

到目前为止,我有这个:

var DIAGONAL_TOP_LEFT_BOTTOM_RIGHT = 0;
var DIAGONAL_BOTTOM_LEFT_TOP_RIGHT = 1;
function start(){
var grid = new Grid(3, 3);
grid.initFromArray([
[4, 2, 5], // 0th row
[1, 8, 3], // 1st row
[4, 3, 9] // 2nd row]);
var diagonal =
}


function getDiagonal(grid, whichDiagonal){
var diagonalList = [];
for(var col = 0; col < grid.getCols(); col++){
for(var row = 0; row < grid.getRows(); row++){
println(col);
var cur = grid.get(row,col);
println(cur);
}
}
}
}

我不太确定从这里开始。任何帮助不胜感激!

您可以使用map- 第二个参数是索引,因此此脚本在第一个数组中查找第一个值,在第二个数组中查找第二个值,依此类推...

const matrix = [
[4, 2, 5], 
[1, 8, 3], 
[4, 3, 9]];
console.log('↘️', 
matrix.map((a, i) => a[i]));
console.log('↗️', 
[...matrix].reverse().map((a, i) => a[i]));

函数diag()将返回任何 2D 矩阵的对角线:

const arr=[[4, 2, 5],
[1, 8, 3],[4, 3, 9]];
const diag=a=>a.map((v,i)=>v[i]);
console.log(diag(arr));

我们首先要检查以确保矩阵是一个完美的正方形(嵌套数组的长度与每个数组的项目数相同)。

我添加的isValidMatrix()函数检查以确保矩阵数组是有效的数组,每个子数组也是与其父矩阵长度相同的有效数组。

之后,我添加了两个单独的函数getDiag1()getDiag2()。第一个函数将每个嵌套数组映射到其中与其嵌套数组具有相同索引的任何元素。换句话说,它将从第一个数组中获取第一个项目,从第二个数组中获取第二个项目,依此类推。我们这样做是这样的:row[i]

相反,第二个函数将从第一个数组中获取最后一个数组项,从第二个数组中获取第二个到最后一个数组项,依此类推。我们这样做是这样的:row[row.length-i-1]

let matrix = [[4, 2, 5],
[1, 8, 3],
[4, 3, 9]];
const isValidMatrix = matrix => Array.isArray(matrix) && matrix.every(row => Array.isArray(row) && row.length === matrix.length)
const getDiag1 = matrix => isValidMatrix(matrix) && matrix.map((row,i) => row[i]);
const getDiag2 = matrix => isValidMatrix(matrix) && matrix.map((row,i) => row[row.length-i-1]);
console.log(getDiag1(matrix), getDiag2(matrix));

最新更新