Javascript 从二维数组中检索对角线值

Javascript 从二维数组中检索对角线值,javascript,arrays,matrix,Javascript,Arrays,Matrix,我试图创建一个函数,从二维数组中检索对角线值: input = [ [1, 2, 3, 4], [5, 1, 2, 3], [9, 5, 1, 2] ] output = [[9], [5, 5], [1, 1, 1], [2, 2, 2], [3, 3], [4]] 我很难弄清楚如何在嵌套循环中操作索引。。。这就是我目前正在处理的问题: const diagonalValues = arr => { let output = new Array(2*i

我试图创建一个函数,从二维数组中检索对角线值:

input = [
    [1, 2, 3, 4],
    [5, 1, 2, 3],
    [9, 5, 1, 2]
]

output = [[9], [5, 5], [1, 1, 1], [2, 2, 2], [3, 3], [4]]
我很难弄清楚如何在嵌套循环中操作索引。。。这就是我目前正在处理的问题:

const diagonalValues = arr => {
    let output = new Array(2*input.length);
    for (let i = 0; i < output.length; i++) {
        output[i] = [];
        if (i < input.length) {
            for (j = input.length-1; j>i-input.length; --j) {
                console.log(i, j)
            }
        }
    }
}
const对角线值=arr=>{
让输出=新数组(2*input.length);
for(设i=0;ii-input.length;--j){
控制台日志(i,j)
}
}
}
}

如何实现这一点?

您可以使用get number of rows(行数)和number of column(列数)来计算对角线矩阵,行数就是数组数,列数就是每个内部数组中的元素数(假设所有数组的元素数相同)

const输入=[
[1, 2, 3, 4],
[5, 1, 2, 3],
[9, 5, 1, 2]
]
常量行=input.length;
常量列=输入[0]。长度;
const total=列+行-1;
常量结果=[];
对于(设i=rows-1;i>=0;i--){
常量行=输入[i];
for(设j=0;j
让输入=[
[1, 2, 3, 4],
[5, 1, 2, 8],
[9, 5, 1, 2],
[9, 5, 1, 2],
[9, 5, 1, 2],
];
放出=[];
for(设i=1-input.length;iforEach(o=>console.log(JSON.stringify(o))您可以使用此算法从2d输入数组中检索对角线值

const输入=[
[1, 2, 3, 4],
[5, 1, 2, 3],
[9, 5, 1, 2]]
让输出=[]
input.forEach(res=>{
res.forEach(resp=>{
//如果数组的长度等于1
if(output.filter(x=>x==resp.length>0){
output.filter(x=>x==resp)[0].push(resp)
//如果数组的长度大于1
}else if(output.filter(x=>x[0]==resp.length>0){
output.filter(x=>x[0]==resp)[0]。push(resp)
}否则{
设温度=[]
温度推送(resp)
输出推送(温度)
}
})
})

output.forEach(o=>console.log(JSON.stringify(o))
这对其他输入不起作用(例如,我的答案中的输入)。@junvar我想是的,如果你想按不同的顺序,你可以使用
reverse
。@junvar或者只是取消移位而不是推。你是对的,我曾一度认为对于比宽度高的数组它失败了,但我错了。另一个方向呢<代码>[1]、[2,5]、[3,1,9]、[4,2,5]、[3,1]、[2]