JavaScript如何生成“错位循环”数字二维数组?
解决嵌套循环生成循环排列二维数组的问题
你只需要把内层循环的push内容替换成这个表达式:
((i + j) % gridSize) + 1
完整代码如下:
const grid = [] const gridSize = 3 for(let i = 0; i < gridSize; i++) { const row = [] for(let j = 0; j < gridSize; j++) { row.push(((i + j) % gridSize) + 1) } grid.push(row) } console.log(grid) // 输出结果和示例完全一致: // [ [1,2,3], [2,3,1], [3,1,2] ]
逻辑拆解
i是当前行的索引(从0开始),i + j对应当前元素在循环序列中的偏移位置- 对
gridSize取模%,用来处理超出最大值后的循环重置(比如当i+j等于3时,3%3=0) - 最后加
1是因为我们的数字从1开始,而模运算的结果范围是0到gridSize-1,加1后正好对应1到gridSize的循环
另外你提到的每行总和相等的问题,本质是因为每行都是1到gridSize的完整排列,所以每行总和固定为(1 + gridSize) * gridSize / 2,自然保持相等。
内容的提问来源于stack exchange,提问作者SeriousLee
相关产品推荐
相关产品推荐

