Самый простой способ получить случайное число, которого нет в подстроке? - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь отследить, какие значения в подстроке были использованы, а затем выбрать одно из значений, которые еще не использовались.

Идея заключается в том, что система подсказок,не просто повторяет одни и те же подсказки.

Быстрый пример:

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

Так что в этом примере мне нужно либо получить 'value2' или 'value3'.

Надеюсь, что это имеет смысл.Любые подходы также приветствуются, я довольно новичок в кодировании.Спасибо.

РЕДАКТИРОВАТЬ:

Мне нужен код, чтобы учесть, что usedStr может быть 0 и 3, например.Math.random не будет работать ...

А также используемые значения хранятся в localStorage.

Ответы [ 3 ]

0 голосов
/ 08 октября 2018
  • Попробуй:

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;
  }
}
0 голосов
/ 08 октября 2018

Вы можете использовать что-то вроде:

// 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;
0 голосов
/ 08 октября 2018

Идея: перемешайте ваши подсказки и начало, а затем 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...