javascript - 将随机字符串转换为十六进制颜色

标签 javascript

我的应用程序中有一个操作日志表。我想根据该条目的 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

那么,这是怎么回事?

  1. 事情从 3 行开始,其中 'mj3bPTCbIAVoNr93me1I' 被转换为 Integer,比如 x,通过将其解释为 base-36 数字。
  2. 接下来,x4 行作为 String 被放入它的指数形式。这是因为有那么多字符,x可以巨大,这个例子大约是8e30,所以把它转换成一个漂亮的形式标准。
  3. 在此之后,第 5 行删除了开头和结尾,因此您将只剩下数字,例如'8.123e+30'.slice(2, -5) 变为 '12'
  4. 现在我们回到 2 行,它再次转换回 Integer,这次是以 10 为基数。
  5. 然后,第 6 行使用快速按位 AND 将该数字 chop 到范围 0..16777215 (=== 0xFFFFFF) .这也会将 NaN 转换为 0
  6. 最后,第 7 行通过将数字写入基数 16 并更改大小写,将其转换回我们习惯于查看颜色的大写十六进制格式。

如果你想使用这个,你可能还想确保最后的数字是 6 位,并在前面贴一个 #,这可以通过

'#' + ('000000' + stringHexNumber).slice(-6); // "#32EF01"

关于javascript - 将随机字符串转换为十六进制颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845584/

相关文章:

javascript - CSS3动画 "progress"回调

javascript - 如何以编程方式关闭 phonegap 通知

javascript - Angular 和 Materialise 日期选择器

javascript - 在 JavaScript 中将样式属性的值存储到一个变量中。

javascript - 检查某人的带宽并根据它加载内容

javascript - 每秒加载内容,无需单击按钮

javascript - Netsuite 用户事件脚本 : Not all user event types firing

javascript - 使用 jQuery 的背景图像转换

javascript - Hammer.js 中 panend 和 pancancel 的区别?

javascript - 是否有跨浏览器的方法来抑制大多数输入字段的输入?