利用 JS 打印 a-z

Huy大约 1 分钟javascriptjavascript

缘起:在看 Ant Design 源码的时候,看到一个有趣的案例,是连续打印字母 a-z。

const a_z = [...Array(25)].map((_, i) => (i + 10).toString(36))

通常做法是利用String.fromCharCode() 传入一个指定的 Unicode 值,然后返回一个字母字符串,连续打印则为:

const upBaseCode = 65 // 大写基数 [65, 90]
const lowerBaseCode = 97 // 小写基数 [97, 122]
for (let i = 0; i < 26; i++) {
  console.log(String.fromCharCode(i + lowerBaseCode)) // 小写
  console.log(String.fromCharCode(i + upBaseCode)) // 大写
}

但还有另外一种做法,利用 Number.prototype.toString(radix)

通常,Number 转字符串不需要传参数,但是也可以传一个 radix,表示转换进制。

十进制二进制八进制十六进制
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F

上表中可以看到十六进制用到了字母 A 到 F,而三十六进制则会用到 A 到 Z。因此,可以利用该特性进行转换:

for (let i = 0; i < 26; i++) {
  console.log((10 + i).toString(36)) // 36 进制中 10 开始为字母, 结果为小写 a-z
  console.log((10 + i).toString(36).toUpperCase()) // 结果为大写 A-Z
}

因此,以下的代码便不难理解了:

const a_z = [...Array(25)].map((_, i) => (i + 10).toString(36))
// ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y']
Loading...