for(i=0;i<10;i++) {
console.log(i);
}
Этот код выведет последовательность 0-9.
Вопрос. Как вывести эту последовательность(всю) в случайном порядке.
Хочется увидеть самую чистую и правильную реализацию
Короткий, но к сожалению, дающий неравномерное распределение способ:
let arr = [];
for (let i = 0; i < 10; arr[i] = i++);
arr.sort(() => Math.random() - 0.5);
console.log(arr);
Альтернативный, более корректный вариант:
function shuffle(n) {
let arr = [];
for (let i = 0; i < n; arr[i] = i++);
return arr.map(a => {
return {
val: a,
rnd: Math.random()
}
}).sort((a, b) => a.rnd - b.rnd).map(a => a.val)
}
console.log(shuffle(10));
Если чистый, это без жуквери и андерскора/лоудаша, то вот так работает правильно: =)
const range = 10;
let used = {};
for (let i = 0; i < range; ++i) {
let r = Math.floor(Math.random() * (range - i));
console.log((r in used) ? used[r] : r);
let l = range - i - 1;
used[r] = (l in used) ? used[l] : l;
}
С lodash будет короче:
_.forEach(_.shuffle(_.range(0,10)), function(v) {
console.log(v);
});
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>
вариант
"use strict"
const range = 10;
let used = Array(range);
for (let i = 0; i < range; ++i) {
let r = Math.floor(Math.random() * range);
let l = used[i] !== void(0) ? used[i] : i;
used[i] = used[r] !== void(0) ? used[r] : r;
used[r] = l;
}
console.log(used);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть проект и в нём куча подключённых библиотек, например lodashИз этой библиотеки я использую пока только одну функцию _