我的应用程序中有一个操作日志表.我想根据该条目的sessionID为行分配一个随机颜色,以帮助查看模式/分组操作.
到目前为止我有这个:
console.log(stringToColorCode('mj3bPTCbIAVoNr93me1I'));
function stringToColorCode(str) {
return '#'+ ('000000' + (Math.random()*0xFFFFFF<<0).toString(16)).slice(-6);
}
Run Code Online (Sandbox Code Playgroud)
但是我需要用我的字符串整数替换Math.random(),是否有任何技术可以将字符串转换为与随机字符串保持一致的随机数?
Pau*_* S. 17
根据要求,将其作为awswer发布
var stringHexNumber = ( // 1
parseInt( // 2
parseInt('mj3bPTCbIAVoNr93me1I', 36) // 3
.toExponential() // 4
.slice(2,-5) // 5
, 10) & 0xFFFFFF // 6
).toString(16).toUpperCase(); // "32EF01" // 7
Run Code Online (Sandbox Code Playgroud)
发生什么了?
3
,其中'mj3bPTCbIAVoNr93me1I'
被转换成一个整数,比方说x
,通过将其解释为碱-36号. x
将其作为String的指数形式放在行上4
.这是因为有很多字符,x
可能是巨大的,这个例子是围绕的8e30
,所以将它转换为非常标准的形式. 5
在开始和结束时进行修剪,因此您只需要数字,例如'8.123e+30'.slice(2, -5)
变为数字'12'
.2
,这将再次转换回整数,这次是在10.6
将此数字截断到该范围.这也将转换为.0..16777215 (=== 0xFFFFFF)
NaN
0
7
转换回大写十六进制格式,我们习惯于通过在底部写入数字16
并更改大小写来查看颜色.如果你想使用它,你可能还想确保最终的数字是6
数字并且#
在前面粘贴一个,这可以通过
'#' + ('000000' + stringHexNumber).slice(-6); // "#32EF01"
Run Code Online (Sandbox Code Playgroud)
She*_*tJS 11
var color_codes = {};
function stringToColorCode(str) {
return (str in color_codes) ? color_codes[str] : (color_codes[str] = '#'+ ('000000' + (Math.random()*0xFFFFFF<<0).toString(16)).slice(-6));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6627 次 |
最近记录: |