Есть ли простой способ сделать случайный выбор из массива в JavaScript или любом другом языке программирования?
Я читаю начальную книгу JavaScript с некоторым кодом, который сравнивает вход кодера (ответ var) с случайно выбранной строкой из массива (ответы). Это игра угадывания.
Я смущен тем, как строка выбирается случайным образом. Кажется, что код умножает функцию Math.random на массив ответов и его свойство length. Проверяя это, это стандартный способ сделать случайный выбор из массива? Почему вы использовали математический оператор, *, чтобы умножить... out... случайную строку на основе длины массива? Разве это не длина, а всего лишь 3 строки?
Я просто чувствую, что это должно быть что-то простое, как
index = answers.random. Существует ли это в JS или на другом языке?
<script>
var guess = "red";
var answer = null;
var answers = [ "red",
"green",
"blue"];
var index = Math.floor(Math.random() * answers.length);
if (guess == answers[index]) {
answer = "Yes! I was thinking " + answers[index];
} else {
answer = "No. I was thinking " + answers[index];
}
alert(answer);
</script>
Ответы
Ответ 1
Это легко в Python.
>>> import random
>>> random.choice(['red','green','blue'])
'green'
Причина того, что код, который вы смотрите, настолько распространен, что обычно, когда вы говорите о случайной переменной в статистике, он имеет диапазон [0,1]. Подумайте об этом как о проценте, если хотите. Чтобы сделать этот процент подходящим для выбора случайного элемента, вы умножаете его на диапазон, позволяя новое значение находиться между [0, RANGE]. Math.floor()
гарантирует, что число является целым числом, поскольку десятичные знаки не имеют смысла при использовании в качестве индексов в массиве.
Вы можете легко написать аналогичную функцию в Javascript, используя свой код, и я уверен, что есть много библиотек утилиты JS, которые включают один. Что-то вроде
function choose(choices) {
var index = Math.floor(Math.random() * choices.length);
return choices[index];
}
Затем вы можете просто написать choose(answers)
, чтобы получить случайный цвет.
Ответ 2
Math.random
дает случайное число от 0 до 1.
Умножение этого значения на длину вашего массива даст вам число, строго меньшее длины вашего массива.
Вызов Math.floor
на этом будет усекать десятичное число и дать вам случайное число в пределах вашего массива
var arr = [1, 2, 3, 4, 5];
//array length = 5;
var rand = Math.random();
//rand = 0.78;
rand *= arr.length; //(5)
//rand = 3.9
rand = Math.floor(rand);
//rand = 3
var arr = [1, 2, 3, 4, 5];
//array length = 5;
var rand = Math.random();
//rand = 0.9999;
rand *= arr.length; //(5)
//rand = 4.9995
rand = Math.floor(rand);
//rand = 4 - safely within the bounds of your array
Ответ 3
Здесь вы идете
function randomChoice(arr) {
return arr[Math.floor(arr.length * Math.random())];
}
Ответ 4
Популярная библиотека javascript Underscore предоставляет функцию для этого, которая может быть использована аналогично python random.choice:
http://underscorejs.org/#sample
var random_sample = _.sample([1, 2, 3, 4, 5, 6]);
Ответ 5
Math.random
и подобные функции обычно возвращают число от 0 до 1. Таким образом, если вы умножаете случайное число на ваше наивысшее возможное значение N
, вы получите случайное число от 0 до N
.
Ответ 6
В Python это...
import random
a=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'etc.']
print random.choice(a)
Ответ 7
var choiceIndex = Math.floor(Math.random() * yourArray.length)
Ответ 8
В Python очень строчная
>>>print(__import__('random').choice(["element1", "element2", "element3"]))
'element1'
Ответ 9
JavaScript
Нет. Vanilla JS не предоставляет какой-либо метод, подобный следующему. Вы должны рассчитать, к сожалению.
function sample(array) {
return array[Math.floor(Math.random() * array.length)];
}
console.log(sample([1, 2, 3]));
console.log(sample([11, 22.3, "33", {"a": 44}]));
Попробуйте это здесь.
Но, если вы используете lodash, описанный выше метод уже описан.
let _ = require('lodash');
console.log(_.sample([11, 22.3, "33", {"a": 44}]));
Попробуйте это здесь.
питон
import random
random.choice([1, 2.3, '3'])
Попробуйте это здесь.
Рубин
используя один тип данных,
[1, 2, 3].sample
используя несколько типов данных,
[1, 2.34, 'a', "b c", [5, 6]].sample
Попробуйте это здесь.
Обновлено: добавлен пример JavaScript.