javascript - 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 ] ]
在我写的这个嵌套循环中我做错了什么?
我所能看到的是它在进入第二个循环之前循环了第一个循环....
解决方案
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);
推荐阅读
- python - 将行附加到空的 Pandas 数据框
- python - 在 Python 中,是否可以让子进程写入内存中的字节对象而不是文件?
- c# - 字段中css类的动态变化
- c# - Android 8 接收停止接收媒体按钮事件
- c - 如何正确管理 strtok_r 的输出?
- prolog - 为什么我无法通过 Prolog 中的数组名称访问数组数据?
- vue.js - 如何转换 *.vue 示例文件以供 CDN 使用?
- php - Laravel 5.8 使用布局变量重置密码邮件不起作用
- css - 如何隐藏由于overflow-x:hidden而未完全显示的元素?
- wordpress - 使用 xampp 安装 wordpress