从字符串中选择随机数组元素,但相同的字符串始终返回相同的元素。伪随机

时间:2019-04-03 15:07:12

标签: javascript arrays random ecmascript-6

我在Javascript中有一系列可能的颜色:

possibleColors = [
        "#10ace3",
        "#f26529",
        "#c62328",
        "#e53434",
        "#ffba49",
        "#99c24d",
        "#7e1d1d"
      ]

给出一个字符串(这个人的名字),我想总是随机选择相同的颜色。

例如:

"Sergio" would always return the first color.
"Daniel" would always return the fourth color.
etc.

有关如何执行此操作的任何建议?请不要从字面上理解我的示例,我只是说相同的字符串应该返回相同的颜色。

3 个答案:

答案 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)
}

https://repl.it/@baruchvlz/GrubbyAgonizingOffice

答案 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