首页 > 解决方案 > JS:获取对角线行和列的嵌套循环?

问题描述

我对从嵌套循环中获取对角数组的尝试感到有些困惑。

想象一下,有一个 8 x 8 方格的棋盘,其中一个方格中有一个皇后。我可以完美地计算出皇后可能的向上、向右、向下和向左移动,但我被困在对角线移动上。

假设皇后在 [4, 4] ([row, column]) 上。我编写了这段代码来生成/循环可能的对角线移动,例如左下角。

是后在棋盘行上的r_q位置(从下到上),而后在c_q棋盘列上的位置(从左到右)。

let dlArr = [];
let attackCount = 0;
let r_q = 4, c_q = 4;

for(let dl = r_q - 1; dl > 0; dl--) {
  for(let ld = c_q - 1; ld > 0; ld--) {
    dlArr.push([dl, ld]);
    attackCount++;
  }
}

console.log(dlArr);

我拿回了数组dlArr

[ [ 3, 3 ], [ 3, 2 ], [ 3, 1 ], [ 2, 3 ], [ 2, 2 ], [ 2, 1 ], [ 1, 3 ], [ 1, 2 ], [ 1, 1 ] ]

而不是它应该是什么

[ [ 3, 3 ], [ 2, 2 ], [ 1, 1 ] ]

在我写的这个嵌套循环中我做错了什么?

我所能看到的是它在进入第二个循环之前循环了第一个循环....

标签: javascriptmultidimensional-arraynested-loops

解决方案


for由于嵌套了两个循环,因此您不需要的输出返回正确正方形的每个排列。相反,只需使用一个递减每个坐标的 for 循环。这应该给你所有在女王西南斜西南的正方形:

let dlArr = [];
let attackCount = 0;

let r_q = 4;
let c_q = 4;

let dl = (r_q - 1);
let ld = (c_q - 1);

while (dl > 0 && ld > 0) {
    dlArr.push([dl, ld]);
    attackCount++;
    dl--;
    ld--;
}

console.log(dlArr);

dl不需要等同于ld. 有许多职位并非如此。


编辑:我认为这个速记版本很有趣:

let dlArr = [];
let attackCount = 0;

let r_q = 4;
let c_q = 4;

let dl = r_q; // no need for (r_q - 1)
let ld = c_q; // ditto

while ( (--dl && --ld) > 0 ) {
    dlArr.push([dl, ld]);
    attackCount++;
}

console.log(dlArr);


推荐阅读