Подтвердить что ты не робот

Есть ли простой способ сделать случайный выбор из массива в 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>
4b9b3361

Ответ 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.