Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.02.2016, 23:15
Аватар для ababagalamaga
Новичок на форуме
Отправить личное сообщение для ababagalamaga Посмотреть профиль Найти все сообщения от ababagalamaga
 
Регистрация: 19.02.2016
Сообщений: 4

использовать Math.random без повторения значений
Добрый день, прошу подсказать решение..
Нужно перемешать массив из 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()

Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 23.02.2016, 23:21
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Оч Быстрый Код от Рони! (Плохо искали...

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);
Ответить с цитированием
  #3 (permalink)  
Старый 23.02.2016, 23:23
Аватар для ababagalamaga
Новичок на форуме
Отправить личное сообщение для ababagalamaga Посмотреть профиль Найти все сообщения от ababagalamaga
 
Регистрация: 19.02.2016
Сообщений: 4

буду пробовать
Спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2016, 12:19
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

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...3Yates_shuffle
Fisher–Yates Shuffle Visualization
Ответить с цитированием
  #5 (permalink)  
Старый 24.02.2016, 12:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Poznakomlus
0 !== currentIndex
зачем красное?
Ответить с цитированием
  #6 (permalink)  
Старый 24.02.2016, 12:58
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

строгое сравнение быстрее отрабатывать должно
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему можно использовать id элемента без использования getElementById? grifangel Общие вопросы Javascript 3 08.01.2014 22:20
Перегрузить картинку в капче без Math.random izcian Общие вопросы Javascript 5 13.11.2013 15:11
Как изменить хтмл без потери значений. PashPP Общие вопросы Javascript 2 04.08.2012 23:34