#javascript #html #arrays #random
#javascript #HTML #массивы #Случайный
Вопрос:
У меня есть одна из четырех возможностей для этой конкретной переменной ->
var lowVelocity = Math.random() * (45 - 30) 30;
var medVelocity = Math.random() * (60 - 45) 45;
var highVelocity = Math.random() * (80 - 60) 45;
var hwyVelcoity = Math.random() * (100 - 80) 80;
В одном сценарии у меня может быть либо низкая скорость, либо средняя скорость, поэтому я хочу выбирать случайным образом только между этими двумя. Итак, я сделал это с помощью:
const velocities = ["lowVelocity", "medVelocity"];
const randomUrban = Math.floor(Math.random() * velocities.length);
И это работает — теперь он выбирает одну из двух скоростей, которые меня интересуют. Низкая скорость составляет от 30 до 45, а средняя — от 45 до 60.
В моем innerHTML я хочу напечатать число, возвращаемое из этой переменной, выбранной в массиве. Когда пользователь нажимает на это, запускается функция, в которой есть это.
document.getElementById("scenario").innerHTML = randomUrban;
Но когда он печатает в HTML, он не печатает число, связанное с переменной, он печатает номер массива, который он выбрал (например, 0 или 1).
Как мне получить переменную (например, если она выбрала lowVelocity, то число, которое она печатает, будет случайным числом, найденным lowVelocity, например 39) для печати вместо номера массива?
Ответ №1:
Вы могли бы просто использовать один массив, чтобы сделать все это за вас!
Если вы добавляете скорости в массив, то случайное число может быть использовано в качестве индекса в этом массиве. В приведенном ниже коде мы используем длину этого массива, чтобы установить ограничения для случайного числа, тогда вы можете просто получить доступ к значению из velocities
массива в позиции, указанной случайным числом:
velocities[randomUrban][1]
Это возвращает подмассив в положение, указанное randomUrban
, а [1] получает второй элемент в строке, то есть вычисленную скорость.
/* Add the velocities to an array or easier management */
var velocities= [
["lowVelocity", Math.random() * (45 - 30) 30],
["medVelocity", Math.random() * (60 - 45) 45],
["highVelocity",Math.random() * (80 - 60) 45],
["hwyVelcoity" ,Math.random() * (100 - 80) 80]
]
/* Pick a random position from the velocities */
const randomUrban = Math.floor(Math.random() * velocities.length);
/* Print the velocity at that position. (Also includes the velocity name for illustration) */
document.getElementById("scenario").innerHTML =
velocities[randomUrban][0] " = " velocities[randomUrban][1];
<div id="scenario"></div>
Примечание: В вашем примере вы используете только 2 из 4 скоростей, поэтому вы можете просто добавить скорости, которые вы хотите выбрать, в randomVelocities
массив.
Ответ №2:
В вашем случае просто используйте
document.getElementById("scenario").innerHTML = window[velocities[randomUrban]];
var lowVelocity = Math.random() * (45 - 30) 30;
var medVelocity = Math.random() * (60 - 45) 45;
var highVelocity = Math.random() * (80 - 60) 45;
var hwyVelcoity = Math.random() * (100 - 80) 80;
const velocities = ["lowVelocity", "medVelocity"];
const randomUrban = Math.floor(Math.random() * velocities.length);
console.log(randomUrban);// random from velocities
console.log(velocities[randomUrban]); //get variable name
console.log(window[velocities[randomUrban]]); // search in scope where the variables are declared in this case window
Комментарии:
1. Спасибо! Это работает так, как ожидалось. Я ценю вашу помощь
рисовал пробелы! document.getElementById(«сценарий»).innerHTML = window[скорости[randomUrban]]; };
2. Привет @PaulDavis если этот или любой другой ответ решил ваш вопрос, пожалуйста, подумайте о том, чтобы принять его , установив флажок. Это указывает более широкому сообществу, что вы нашли решение, и дает некоторую репутацию как ответчику, так и вам самим. Нет никаких обязательств делать это.
Ответ №3:
Как насчет document.getElementById("scenario").innerHTML = velocities[randomUrban];
?
Комментарии:
1. Аааа, выводится вывод «randomUrban» (это хорошо), но не переменная, связанная с randomUrban
![]()
Ответ №4:
Ну, вы пытаетесь напечатать неправильную переменную; randomUrban
выбрана ли переменная, содержащая velocities
индекс массива.
Быстрым (но довольно грязным) исправлением была бы печать, eval(velocities[randomUrban])
но eval()
она устарела из-за проблем с безопасностью.
Немного дольше, но лучшим решением было бы сгруппировать ваши скорости в одну переменную типа object и получить доступ к ее ключам для извлечения числового значения:
const velObj = {
lowVelocity: Math.random() * (45 - 30) 30,
medVelocity: Math.random() * (60 - 45) 45,
highVelocity: Math.random() * (80 - 60) 45,
hwyVelocity: Math.random() * (100 - 80) 80
};
const velocities = ["lowVelocity", "medVelocity"];
const randomUrban = Math.floor(Math.random() * velocities.length);
const velKey = velocities[randomUrban];
document.getElementById("scenario").innerHTML = velObj[velKey];
<div id="scenario"></div>