javascript - 如何在 JavaScript 中高效/快速生成所有颜色的十六进制字符串
问题描述
我最初尝试生成所有颜色值需要大约 8 秒才能运行:
var colors = []
var start = Date.now()
for (var a = 0; a < 16; a++) {
for (var b = 0; b < 16; b++) {
for (var c = 0; c < 16; c++) {
for (var d = 0; d < 16; d++) {
for (var e = 0; e < 16; e++) {
for (var f = 0; f < 16; f++) {
colors.push(color(a, b, c, d, e, f))
}
}
}
}
}
}
var end = Date.now()
console.log('time', end - start + 'ms')
console.log(colors)
function color(a, b, c, d, e, f) {
return String(a)
+ String(b)
+ String(c)
+ String(d)
+ String(e)
+ String(f)
}
输出是这样的:
node gen-color
time 7906ms
[ '000000',
'000001',
'000002',
'000003',
'000004',
'000005',
'000006',
'000007',
'000008',
'000009',
'0000010',
'0000011',
'0000012',
'0000013',
'0000014',
'0000015',
'000010',
'000011',
'000012',
'000013',
'000014',
'000015',
'000016',
'000017',
'000018',
'000019',
'0000110',
'0000111',
'0000112',
'0000113',
'0000114',
'0000115',
'000020',
'000021',
'000022',
'000023',
'000024',
'000025',
'000026',
'000027',
'000028',
'000029',
'0000210',
'0000211',
'0000212',
'0000213',
'0000214',
'0000215',
'000030',
'000031',
'000032',
'000033',
'000034',
'000035',
'000036',
'000037',
'000038',
'000039',
'0000310',
'0000311',
'0000312',
'0000313',
'0000314',
'0000315',
'000040',
'000041',
'000042',
'000043',
'000044',
'000045',
'000046',
'000047',
'000048',
'000049',
'0000410',
'0000411',
'0000412',
'0000413',
'0000414',
'0000415',
'000050',
'000051',
'000052',
'000053',
'000054',
'000055',
'000056',
'000057',
'000058',
'000059',
'0000510',
'0000511',
'0000512',
'0000513',
'0000514',
'0000515',
'000060',
'000061',
'000062',
'000063',
... 16777116 more items ]
想知道如何快速生成所有颜色,或者这是否实际上是最快的方法,因为有很多数据。
解决方案
不超过#FFFFFF 的所有值?稍微漂亮的版本:
Array(0xFFFFFF).fill(0).map((x, y) => (x + y).toString(16).padStart(6, '0'))
性能(ish)版本:
const colors = (_c = []) => {
for (let i=0xFFFFFF; i>=0; --i)
_c[i] = i.toString(16).padStart(6, '0');
return _c;
}
推荐阅读
- ios - 更改项目位置xcode 9.2时如何解决swift编译器错误?
- pycharm - 为什么我无法导入 google-cloud-speech?
- ios - iOS 中的 Facebook 登录 SDK 语言问题
- javascript - 对位于另一个单独范围内的范围进行求和的算法
- python - 需要在 Python 中转换有效日期值并错误输出无效值
- javascript - 对象作为 React 子级无效(找到:[object HTMLDivElement])
- javascript - Angular 6:不能绑定到“formGroup”,因为它不是“form”的已知属性?
- c# - 属性初始化器不能引用非静态字段
- android - Java rx - 你应该使用 Single
- > 或者更确切地说是观察
- c++ - 如何通过 Cppcheck 解释 Null 指针取消引用?