我的应用程序中有一个操作日志表。我想根据该条目的 session ID 为行分配随机颜色,以帮助查看模式/分组操作。
到目前为止我有这个:
console.log(stringToColorCode('mj3bPTCbIAVoNr93me1I'));
function stringToColorCode(str) {
return '#'+ ('000000' + (Math.random()*0xFFFFFF<<0).toString(16)).slice(-6);
}
但是我需要用我的字符串整数替换 Math.random(),是否有任何技术可以将字符串转换为与随机字符串保持一致的随机数?
最佳答案
As requested , 将其发布为 awswer
var stringHexNumber = ( // 1
parseInt( // 2
parseInt('mj3bPTCbIAVoNr93me1I', 36) // 3
.toExponential() // 4
.slice(2,-5) // 5
, 10) & 0xFFFFFF // 6
).toString(16).toUpperCase(); // "32EF01" // 7
那么,这是怎么回事?
- 事情从
3
行开始,其中'mj3bPTCbIAVoNr93me1I'
被转换为 Integer,比如x
,通过将其解释为 base-36 数字。 - 接下来,
x
在4
行作为 String 被放入它的指数形式。这是因为有那么多字符,x
可以巨大,这个例子大约是8e30
,所以把它转换成一个漂亮的形式标准。 - 在此之后,第
5
行删除了开头和结尾,因此您将只剩下数字,例如'8.123e+30'.slice(2, -5)
变为'12'
。 - 现在我们回到
2
行,它再次转换回 Integer,这次是以 10 为基数。 - 然后,第
6
行使用快速按位 AND 将该数字 chop 到范围0..16777215 (=== 0xFFFFFF)
.这也会将NaN
转换为0
。 - 最后,第
7
行通过将数字写入基数16
并更改大小写,将其转换回我们习惯于查看颜色的大写十六进制格式。
如果你想使用这个,你可能还想确保最后的数字是 6
位,并在前面贴一个 #
,这可以通过
'#' + ('000000' + stringHexNumber).slice(-6); // "#32EF01"
关于javascript - 将随机字符串转换为十六进制颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845584/