Непредсказуемое поведение делает наши приложения более интересными, когда все сделано правильно. Например, представьте себе карточные игры, где вы можете держать один и тот же набор карт, чтобы играть в каждый раунд, а не перетасовать их в конце каждой игры, чтобы получить новые карты! Нам определенно нужна какая -то рандомизация, чтобы сделать нашу жизнь веселее:)
Math.random ()
В JavaScript у нас есть встроенный метод под названием Math.random (). Мы не будем подробно рассказывать о том, как Math.random () реализован под капюшоном, но давайте поговорим об использовании Math.random () для генерации случайных чисел, которые мы хотим. Давайте сначала запустим Math.random () в консоли.
Math.random() // 0.34484257625111736
Math.random () возвращает плавающее число (число с десятичным значением) между 0 (включительно) до 1 (эксклюзив). Зная это поведение, мы можем настроить его так, чтобы оно масштабировалось до того, что мы хотим! Давайте предположим, что мы хотим случайное целое число (число без десятичного значения) от 1 до 10. Вот как мы это сделаем.
Math.floor(Math.random() * 10) + 1 // 4
Мы умножаем вывод Math.random () на 10, который всегда будет возвращать плавающее число между 0 и 9,9999999 … потому что 0 раз 10 по -прежнему 0 и 0,9999999 … времена 10 – 9,9999999 … (Math.random () никогда не достигает 1).
Во -вторых, мы используем Math.floor (), чтобы округлить его до ближайшего целого числа. Вывод теперь возвращает целое число между 0 и 9.
Затем мы добавим 1, чтобы компенсировать наш выход! Наша формула теперь генерирует число от 1 до 10.
Лучшее решение?
На самом деле мы могли бы немного сократить наш код, используя math.ceil () вместо math.floor ().
Math.ceil(Math.random() * 10) // 8
Math.ceil () принимает число и раунды вверх к ближайшему целому числу, которое действует напротив Math.floor (). Это означает, что в конце концов нет необходимости +1.
Выберите то, что вам нравится, хотя я чаще видел первый метод.
Способность повторного использования для победы!
Если вы читали мои статьи. Вы знаете, насколько я сосредоточен на том, чтобы сделать коды повторно используемыми. Используя приведенную выше методику, которую мы изучили, давайте сделаем универсальную функцию, которая занимает минимальное число и максимальное число, чтобы выпустить число между диапазоном 2 аргументов. На самом деле, прежде чем я кодирую это для вас. Почему бы тебе не попробовать в качестве упражнения?
Шаги
Ты понял? Не волнуйтесь, если нет. На самом деле довольно сложно обнять его голову в первый раз.
Мы знаем Math.random () дают плавающее число от 0 до 0,9999999 … Мы также знаем, что Math.floor () завершает число до ближайшего целого числа. Следовательно, Math.floor (math.random ())
всегда приводит к 0. Ну, что мы делаем, чтобы получить более одного целого числа в результате? Возможное число внутри math.floor () должно быть больше 1!
Напомним, что умножение на 10 на Math.random () дает нам 10 возможностей. Что если мы умножаем на 5 или 2?
Math.floor(Math.random() * 10) // 0 - 9 (10 possibilities) Math.floor(Math.random() * 5) // 0 - 4 (5 possibilities) Math.floor(Math.random() * 2) // 0 - 1 (2 possibilities)
Хорошо, давайте дадим сценарий и скажем, что мы хотим случайное целое число в диапазоне 10 и 20. Давайте пройдем в 10 как наш мин и 20 как наш макс. Это означает, что нам нужно умножить математику. Вот что у нас есть до сих пор.
function getRandomNumber(min, max) { return Math.floor(Math.random() * (max - min)) }
Это на самом деле превращается в то, что у нас было в начале для нашего сценария.
Math.floor(Math.random() * (20 - 10)) // 0 - 9 (10 possibilities)
Тем не менее, мы хотим, чтобы несколько вещей были разными. Обратите внимание, что мы сейчас ищем 11 Возможности Вместо 10 возможностей, потому что мы хотим включить 10 и 20 (10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20). Итак, давайте добавим 1 в нашу формулу.
function getRandomNumber(min, max) { return Math.floor(Math.random() * (max - min + 1)) }
Который в нашем сценарии
Math.floor(Math.random() * (20 - 10 + 1)) // 0 - 10 (11 possibilities)
Наконец, мы также заботимся о нашем диапазоне, а также количество возможностей. Что нам нужно, чтобы увеличить с 0 до 10 до 10 – 20? Добавление мин в конце. Вот решение.
Решение
function getRandomNumber(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }
Наш сценарий дает
Math.floor(Math.random() * (20 - 10 + 1)) + 10 // 10 - 20 (11 possibilities)
Резюме
Math.random () довольно полезен и мощный, который можно использовать для многих различных целей. От случайного выбора значения из заданного массива до генерации другого числа при прокатке на кости – все это сделано через Math.random (). Я надеюсь, что вы сможете поиграть с этим в ближайших проектах, если у вас еще не будет возможности использовать его. Спасибо за чтение!
Оригинал: “https://dev.to/shimphillip/working-with-random-numbers-in-javascript-1c0k”