@holfizz

Как сделать чтобы рандом всегда давал новые значения?

let coinFlip = [
    '900deg',
    '1080deg',
    '1260deg',
    '1440deg',
    '1620deg',
    '1800deg',
    '1980deg',
    '2160deg',
    '2340deg',
    '2520deg'
]
let random = (Math.random()*10).toFixed()
let button = document.querySelector('.button');
button.addEventListener('click',()=>{
    console.log(coinFlip[random])
})

как сделать чтобы в консоль выводилось при нажатии выводились разные значения а не одно и то же
  • Вопрос задан
  • 141 просмотр
Решения вопроса 2
dollar
@dollar
Делай добро и бросай его в воду.
У вас переменная random (случайное число) генерируется единожды, и дальше используется при каждом нажатии на кнопку.

Нужно поместить эту логику внутрь функции-обработчика нажатия на кнопку, то есть внутрь фигурных скобок {}. Тогда новое случайное число будет генерироваться при каждом нажатии на кнопку, что и даст разные значения.

P.S. на заметку:
На первое место выпадает шанс не 10%, а всего 5% случаев. И ещё 5% не будет попадать в границы массива, что будет приводить к ошибке.
((0.00)*10).toFixed() // "0"
((0.01)*10).toFixed() // "0"
((0.04)*10).toFixed() // "0"
((0.05)*10).toFixed() // "1"
((0.94)*10).toFixed() // "9"
((0.95)*10).toFixed() // "10"
((0.96)*10).toFixed() // "10"
Ответ написан
Комментировать
Newto
@Newto
let coinFlip = [
    '900deg',
    '1080deg',
    '1260deg',
    '1440deg',
    '1620deg',
    '1800deg',
    '1980deg',
    '2160deg',
    '2340deg',
    '2520deg'
]

let button = document.querySelector('.button');
button.addEventListener('click',()=>{
    let random = Math.floor(Math.random() * 10);
    console.log(coinFlip[random])
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Чтобы пореже шли два одинаковых значения подряд, можно перемешивать элементы массива случайным образом, и затем выдавать их последовательно. Когда весь массив исчерпан (ни одного повтора), снова встряхнуть массив и снова начать выдавать элементы по очереди.

Совсем чуть-чуть заморочиться, и можно сделать, чтобы гарантированно никогда не шло одно и то же "случайное" значение два раза подряд.
// random order in-place
const shuffle = array => {
  for (let i = array.length - 1; i > 0; i--) {
    let j = Math.floor(Math.random() * (i + 1)); // random index from 0 to i
    [array[i], array[j]] = [array[j], array[i]];
  }
};

// init
let coinIndex = -1;

const button = document.querySelector('.button');
button.addEventListener('click', () => {
  if (coinIndex < 0) {
    shuffle(coinFlip);
    coinIndex = coinFlip.length - 1;
  }
  console.log(coinFlip[coinIndex]);
  coinIndex--;
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы