获取矩阵数组对角线的Javascript
我想使用javascript获得矩阵数组的所有对角线。假设输入和输出如下:获取矩阵数组对角线的Javascript,javascript,arrays,Javascript,Arrays,我想使用javascript获得矩阵数组的所有对角线。假设输入和输出如下: input = [ [1,2,3], [4,5,6], [7,8,9], ] output = [ [1], [4,2], [7,5,3], [8,6], [9], ] 如何将输入转换为输出?我如何才能做到这一点,使其适用于任何尺寸的方形网格(2x2、3x3、4x4等) 谢谢 想到的第一种方法(不一定是最好的方法)就是让一个循环沿着正方形的左边缘运行,然后是一个循环沿着正方形的下边缘运
input = [
[1,2,3],
[4,5,6],
[7,8,9],
]
output = [
[1],
[4,2],
[7,5,3],
[8,6],
[9],
]
如何将输入转换为输出?我如何才能做到这一点,使其适用于任何尺寸的方形网格(2x2、3x3、4x4等)
谢谢 想到的第一种方法(不一定是最好的方法)就是让一个循环沿着正方形的左边缘运行,然后是一个循环沿着正方形的下边缘运行。换言之,我已经编写了代码,它完全符合我在没有巧妙优化的情况下手动获取对角线时所做的操作 请注意,这应该适用于任何大小的正方形,但不要尝试处理矩形:我把它留给读者作为练习
function getDiagonals(m) {
var s, x, y, d,
o = [];
for (s = 0; s < m.length; s++) {
d = [];
for(y = s, x = 0; y >= 0; y--, x++)
d.push(m[y][x]);
o.push(d);
}
for (s = 1; s < m[0].length; s++) {
d = [];
for(y = m.length - 1, x = s; x < m[0].length; y--, x++)
d.push(m[y][x]);
o.push(d);
}
return o;
}
var output = getDiagonals(input);
函数getDiagonals(m){
变量s,x,y,d,
o=[];
对于(s=0;s=0;y--,x++)
d、 推(m[y][x]);
o、 推(d);
}
对于(s=1;s
我对它进行了一些简短的测试,它似乎很有效,但您可以自己尝试。您可以使用以下功能:
var output = new Array(2*input.length-1);
for(var i=0; i<output.length; ++i) {
output[i] = [];
if(i < input.length) for(var j=0; j<=i; ++j)
output[i].push(input[i-j][j]);
else for(var j=input.length-1; j>i-input.length; --j)
output[i].push(input[j][i-j]);
}
var输出=新数组(2*input.length-1);
对于(var i=0;i)以及4x4矩阵的三角形输出是什么样子的?输入=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]输出将不是一个完美的三角形…@L4zl0w-谁说过三角形?OP想要对角线(尽管4x4的输出将是三角形阵列)代码应该像问题中的示例输出那样输出对角线。
var output = new Array(2*input.length-1);
for(var i=0; i<output.length; ++i) {
output[i] = [];
for(var j=Math.min(i, input.length-1); j>Math.max(-1, i-input.length); --j)
output[i].push(input[j][i-j]);
}
const arr = [
[11, 2, 4],
[4, 5, 6],
[10, 8, 12]
];
function diagonalDifference(arr) {
const primaryDiagonal = arr
.map((e, i) => e[i])
.reduce((mem, curr) => mem + curr, 0);
const secondaryDiagonal = arr
.map((e, i) => {
let index = arr.length - i -1;
return e[index];
})
.reduce((mem, curr) => mem + curr, 0);
return Math.abs(primaryDiagonal - secondaryDiagonal);
}
console.log(diagonalDifference(arr));