Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function randomSymbol(symbols) {
return symbols.substr(Math.random()*symbols.length, 1);
}
function randomString(sample, symbols) {
return sample.replace(/ /g, function () {
return randomSymbol(symbols);
});
}
console.log(randomString(' ', '12345'));
1) Откуда мысль о том, что проход шаблона реплейсом должен быть обязательно тормозным?Из моих же свежих измерений из статьи. Нет, они, конечно, очень быстрые, особенно, в Хроме (сравните [4] и [5])? но в 2 раза медленнее цикла в Хроме, до 2.5 медленнее в сравнении с циклом — в IE. Остальные 2 фактора — они да, не такие существенные.
2) Передача параметровТак лучше вообще 1 функцией обойтись — и передачи не будет.
3) Извлечение lengthфактор маленький, но в общей функции его можно вынести за цикл. В двух — видимо, никак, разве что аргументом передавать.
>Math.random().toString(36).length
18
>Math.random().toString(35).length
1101
>Math.random().toString(34).length
34
>Math.random().toString(33).length
1101
>Math.random().toString(32).length
8
>Math.random().toString(31).length
1101
x = Math.random()
x.toString(36).length
x.toString(35).length
...
// ну, вы поняли
Случайный генератор буквоцифр и его варианты