2017-01-06 4 views
0

Извините, если это глупый вопрос, я Javascript нубаКак ввести переменную для использования в функции

Я пытаюсь определить список, чтобы найти случайную запись. Как я могу сделать это без использования операторов if/else или переключателей?

var one = ["Japan","Vietnam","Korea"] 
 
var two = ["bleghg","djakd","dasda"] 
 
var three = ["woop","doop","loop"] 
 

 
function randomItem (list) { 
 
    return list[Math.random()*list.length] 
 
    }
это упрощение того, что я пытаюсь сделать, где я хотел бы ввести имя существующего списка (один, два, или три), и он хотел бы получить случайный предмет из этого списка

Заранее благодарим за помощь!

+0

Где вы получаете название? Не можете ли вы просто передать переменную прямо? –

ответ

1

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

list[Math.floor(Math.random()*list.length)]; 

Чтобы использовать это с вашим кодом, вы должны будете назвать свою функцию одним из своих списков в качестве параметра. Как так:

console.log(randomItem(one)); 
+3

Это исправляет их код, но не отвечает на вопрос. –

0

Заменить list параметров в функции с именем списка:

randomItem(one) 

var one = ["Japan", "Vietnam", "Korea"] 
 
var two = ["bleghg", "djakd", "dasda"] 
 
var three = ["woop", "doop", "loop"] 
 

 
function randomItem(list) { 
 
    // you need to round the random number down 
 
    return list[Math.floor(Math.random() * list.length, 10)]; 
 
} 
 

 
var result = randomItem(one); 
 

 
console.log(result);

0

С @Thomas Juranek исправила использование Math Я не буду вдаваться в это. Вместо этого я отвечу на ваш вопрос об извлечении переменной с использованием имен переменных.

Я бы назвал это взломом, но переменные, объявленные в глобальном, привязаны к объекту окна. Если вы передаете только имя переменной, вы можете получить его, выполнив следующие действия:

function getWindowObject(variableName) { 
    return window[variableName]; 
} 

Это, безусловно, имеет смысл просто передать переменную, однако. Немного лучше способ сделать это, если вы настаиваете на желании объявить свободно свисающие переменные вне области видимости функции, было бы обернуть его в объект:

var myPersonalScope = {}; 
myPersonalScope["one"] = [1, 2, 3]; 
myPersonalScope["two"] = [4, 5, 6]; 

function getPersonalScopeObject(variableName) { 
    return myPersonalScope[variableName]; 
} 
Смежные вопросы