#javascript
for(i=0;i<10;i++) { console.log(i); } Этот код выведет последовательность 0-9. Вопрос. Как вывести эту последовательность(всю) в случайном порядке. Хочется увидеть самую чистую и правильную реализацию
Ответы
Ответ 1
Короткий, но к сожалению, дающий неравномерное распределение способ: 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));Ответ 2
Если чистый, это без жуквери и андерскора/лоудаша, то вот так работает правильно: =) 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); });Ответ 3
вариант "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);
Комментариев нет:
Отправить комментарий