Как рандомизировать (перемешать) массив JavaScript?

dataset в IE не определен. Вероятно, это главный источник проблемы. Все остальное отлично работает на 64-разрядной версии IE9.

Вы можете просто сохранить это состояние локально в JS:

for (var i = 0; i < buttons.length; i++) 
    register( i )

function register( i ){
    button = buttons[i];
    button.onclick = function() {
        changeBGImage(i);
    };
}

Или вы можете выполнить поиск

for (var i = 0; i < buttons.length; i++) 
    button = buttons[i];
    button.onclick = function() {
        changeBGImage(this.getAttribute('data-index'));
    };
}
1072
задан Nit 20 September 2017 в 23:52
поделиться

2 ответа

Де-факто беспристрастным алгоритмом перетасовки является алгоритм Фишера-Ятса (он же Knuth) Shuffle.

См. https://github.com/coolaj86/knuth-shuffle

Вы можете увидеть отличную визуализацию здесь (а оригинальный пост связан с этим)

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; } // Используется так var arr = [2, 11, 37, 42]; arr = shuffle(arr); console.log(arr);

Еще немного информации об используемом алгоритме.

1410
ответ дан 19 December 2019 в 20:15
поделиться
arr1.sort(() => Math.random() - 0.5);
4
ответ дан 19 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: