Просмотр полной версии : использовать Math.random без повторения значений
ababagalamaga
23.02.2016, 23:15
Добрый день, прошу подсказать решение..
Нужно перемешать массив из 16 дивов, но чтобы числа не повторялись. На форуме для данного случая решения не нашел.
Пытался использоваь shuffle - не получается.
function mix_picts()
{
for(i = 0; i<= picts.length - 1; i++)
{
var num = Math.floor(Math.random() * cnt_images) + 1;
picts[i].style.background = 'url(img/' + num + '.jpg)';
}
}
mix_picts()
Заранее спасибо.
Оч Быстрый Код от Рони! (Плохо искали...
Array.prototype.shuffle = function(min,max) {
min = min || 0;
max = ++max || this.length;
var len = max - min;
max = len - this.length;
this.length = len;
for (var a = this.length-1; 0 <= a; a--) {
if(a < max) {break}
var b = Math.floor(Math.random() * a),
c = void 0 === this[b] ? (b + min) : this[b];
this[b] = void 0 === this[a] ? (a + min) : this[a];
this[a] = c
}
this.reverse();
this.length -= max;
return this
};
var arr = Array(16).shuffle();
alert(arr);
ababagalamaga
23.02.2016, 23:23
буду пробовать
Спасибо
Vlasenko Fedor
24.02.2016, 12:19
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
alert(shuffle([1,2,3,4,5,6,7,8,9]));
описание метода
https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
Fisher–Yates Shuffle Visualization (http://bost.ocks.org/mike/shuffle/)
0 !== currentIndex зачем красное?
Vlasenko Fedor
24.02.2016, 12:58
строгое сравнение быстрее отрабатывать должно
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot