获得随机数(不是在子字符串中)的最简单方法?

时间:2018-10-07 21:27:47

标签: javascript dom google-chrome-extension

我试图跟踪子字符串中使用了哪些值,然后选择一个尚未使用过的值。

这个想法是一个提示系统,不仅仅是重复相同的提示。

简单示例:

str = [
  'value1',
  'value2',
  'value3'
];
usedStr = [
  '0'
];

因此在该示例中,我需要获取'value2'或'value3'。

希望如此。任何其他方法也应被赞赏,我对编码还很陌生。谢谢。

编辑:

我需要代码考虑到usedStr的值可以是0和3。 Math.random无法正常工作...

使用的值也存储在localStorage中。

3 个答案:

答案 0 :(得分:0)

  • 尝试一下:

while(1==1){
  var item = str[Math.floor(Math.random()*str.length)];
  if (!usedStr.includes(item)){
    console.log(item);
    usedStr.push(item)
    break;
  }else if (usedStr.length==str.length){
    console.log("usedStr is full");
    break;
  }
}

答案 1 :(得分:0)

您可以使用类似的内容:

// read already used indexes from localStorage
var usedStr = localStorage.usedStr || [];

//create an array of all possible index values
var indexesToUse = [...Array(str.length).keys()];

if (usedStr.length < str.length)  //if not all have been used, remove the used ones
    indexesToUse = indexesToUse.filter(val=>!~usedStr.indexOf(val));

//pick a random value from the index array
var index = indexesToUse[0|Math.random()*indexesToUse.length];

console.log('Today\'s random hint is: ' + str[index]);

//save the used index in localStorage
usedStr.push(index);
localStorage.usedStr = usedStr;

答案 2 :(得分:-1)

这个想法:先将提示和开头打乱,然后pop一个接一个。

var hints = []; //make it global
var usedHints = [];

function getHintsFromStorage() {
  //your logic here
  return ['value1', 'value2', 'value3'];
}

function saveHintsToStorage() {
  //save hints and usedHints here
}

function resetHints() {
  //receive hints somehow
  hints = getHintsFromStorage()
    .sort(function() {
      return Math.random() < 0.5; //shuffle
    });
}

function getHint() {
  if (hints.length > 0) {
    var hint = hints.pop();
    document.getElementById('hint').innerHTML = hint; //use once and throw
    usedHints.push(hint);
    saveHintsToStorage();
  } else {
    document.getElementById('hint').innerHTML = 'no more hints';
  }
}
resetHints();
<div id="hint"></div>
<button type="button" onclick="getHint()">Get Hint</button>
<button type="button" onclick="resetHints()">Reset Hints (for test purpose)</button>