2016-02-29 2 views
-2

Проблема не сложна. Лог. Случайное имя из массива имен.Является ли это элегантным решением?

Мое решение приходит как это.

var names = [ 'nick', 'rock', 'danieel' ]; 
function randPicker(names) { 
    var randNum = Math.floor((Math.random() * 10)); 
    var name = randNum <= (names.length - 1) ? console.log(names[randNum]) : randPicker(arguments[0]); 
}; 

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

+1

Остальная часть не будет исполнена до конца света. –

+3

Просто используйте 'names [Math.floor (Math.random() * names.length)]'. – Xufox

+0

Лучше использовать 'console.log (имена [Math.floor ((Math.random() * names.length))]' без проверки. – jcubic

ответ

1

Лучший способ это сделать функция возвращает случайный элемент массива и зафиксировать его получение:

function randPicker(a) { 
    return a[Math.random() * a.length | 0]; 
} 

И тест:

function randPicker(a) { 
    return a[Math.random() * a.length | 0]; 
} 

var names = ['nick', 'rock', 'danieel']; 

for (var q=0; q<16; ++q) { 
    console.log(randPicker(names)); 
} 
+0

Мне кажется довольно интересным но как насчет вертикальной полосы «|»? Вы использовали ее для возврата значения по умолчанию? – user2300068

+0

@ user2300068, no Я использую его для трансляции в int32 :) – Qwertiy

1

Вы можете получить ваш randNum сразу для извлечения имя:

var names = [ 'nick', 'rock', 'danieel' ]; 
function randPicker(names) { 
    var randNum = Math.floor((Math.random() * names.length)); 
    var name = console.log(names[randNum]); 
}; 
0

Вы можете использовать

var names = [ 'nick', 'rock', 'danieel' ]; 

function randomPicker(names) { 
return names[Math.floor(Math.random() * (names.length+1))]; 
} 

Пояснение:

Math.random() возвращает число в диапазоне [0,1] умножить его на длину array + 1, чтобы получить число в диапазоне [0, длина] с запятой. Наконец, используйте Math.floor, чтобы закруглить его.

+0

Но 'length' не находится внутри массива, поэтому вы не следует добавлять 1. – Qwertiy

+0

И 1 не включен. – Qwertiy

Смежные вопросы