我在Javascript中有一系列可能的颜色:
possibleColors = [
"#10ace3",
"#f26529",
"#c62328",
"#e53434",
"#ffba49",
"#99c24d",
"#7e1d1d"
]
给出一个字符串(这个人的名字),我想总是随机选择相同的颜色。
例如:
"Sergio" would always return the first color.
"Daniel" would always return the fourth color.
etc.
有关如何执行此操作的任何建议?请不要从字面上理解我的示例,我只是说相同的字符串应该返回相同的颜色。
答案 0 :(得分:0)
如果名称是动态给出的,则必须在第一个条目上为其指定颜色,然后确保每个后续条目都返回相同的颜色。
如果您事先知道名称,则只需创建一个地图即可返回相同的颜色。
无论如何,必须创建一些排序映射。
例如:
const nameColorMap = new Map()
const possibleColors = [ "#10ace3", "#f26529", "#c62328", "#e53434", "#ffba49", "#99c24d", "#7e1d1d"]
function getColorForName(name) {
if (!nameColorMap.has(name)) {
const color = possibleColors[Math.round(Math.random() * possibleColors.length)]
nameColorMap.set(
name,
color,
)
}
return nameColorMap.get(name)
}
答案 1 :(得分:0)
您将需要利用某种存储方式,例如localStorage或后端数据库,例如MySQL
由于SO不支持localStorage代码段,因此下面的代码jsfiddle如下:
const possibleColors = [
"#10ace3",
"#f26529",
"#c62328",
"#e53434",
"#ffba49",
"#99c24d",
"#7e1d1d"
]
function getColor(str) {
// Attempt the get the item from local storage (returns null otherwise)
let color = localStorage.getItem(str)
if(!color) {
// Nothing was in local storage, select a random color
color = possibleColors[Math.floor(Math.random() * possibleColors.length)]
// Save the color to local storage for use next time
localStorage.setItem(str, color)
}
// Return the color that was or now is in local storage
return color
}
console.log('jim', getColor('jim'))
console.log('bob', getColor('bob'))
console.log('jim', getColor('jim'))
console.log('brass monkey', getColor('brass monkey'))
console.log('jim', getColor('jim'))
console.log('brass monkey', getColor('brass monkey'))
console.log('brass monkey', getColor('brass monkey'))
多次运行脚本将使用相同的字符串给出相同的结果。由于值存储在存储器中,因此重新加载页面的作用相同。
// Example possible output:
//
// jim #7e1d1d
// bob #c62328
// jim #7e1d1d
// brass monkey #e53434
// jim #7e1d1d
// brass monkey #e53434
// brass monkey #e53434
答案 2 :(得分:0)
只需存储人名和颜色,如果他是新人,就给他带来一个随机的颜色,相反返回他的颜色。
KeywordsFilter