[英]Printing 2d array in javascript
仔细看看您的输出:
a.....g.....m.....s.
.b...f.h...l.n...r.t
..c.e...i.k...o.q...
...d.....j.....p....
请注意,它可以分为相似的重复块:
a..... g..... m..... s.
.b...f .h...l .n...r .t
..c.e. ..i.k. ..o.q. ..
...d.. ...j.. ...p.. ..
该块的长度是可计算的:除第一行和最后一行外,每一行都有2个字母。 总长度为: rows * 2 - 2
。 我们称其为blockLength
。 顺便说一句, x * 2 - 2
始终是偶数-这很重要。
现在,您可以看到在每个块中,字母的左半部分是“下沉的”,而第二个半角是“沉没的”。 因此,如果您进行一些观察和分析,您将理解对于blockLength == 6
您需要在i处输出字母:
row | i % blockLength
----------------------------
0 | 0
1 | 1, blockLength - 1
2 | 2, blockLength - 2
3 | 3
在i
超过blockLength
,它将一次又一次重复,直到字符串的结尾。 如果您了解其规律性,则可以轻松地将其转换为JavaScript循环。
在循环中,以Z字形顺序设置值:
var str = 'abcdefghijklmopqrst';
var rows = 4, letterRows = [], currentRow = 0, direction = 1;
for (var i = 0; i < str.length; i++)
{
letterRows.push(currentRow);
currentRow += direction;
if ((direction === 1 && currentRow == rows - 1) // bottom limit
|| (direction === -1 && currentRow == 0)) // top limit
{
direction = direction * -1; // invert direction
}
}
然后,在嵌套循环内,只需根据letterRows
输出您的字母:
for (var row = 0; row < rows; row++)
{
for (var i = 0; i < str.length; i++)
{
output(letterRows[i] == row ? str[i] : '.'); // output is any possible output in your case
}
output('\n');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.