/
Вопросы и ответы
/
JavaScript
/

Как перемешать элементы массива js

Как перемешать элементы массива js

4 года назад

Человек-Молекула

Ответы

2

Простой способ перемешать массив:

array = array.sort(() => Math.random() - 0.5)

Правильный способ — использовать алгоритм тасования Фишера — Йетса:

const shuffle = (array) => { let m = array.length, t, i; // Пока есть элементы для перемешивания while (m) { // Взять оставшийся элемент i = Math.floor(Math.random() * m--); // И поменять его местами с текущим элементом t = array[m]; array[m] = array[i]; array[i] = t; } return array; }

3 года назад

Aleksandr Litvinov

0

Есть еще один способ для перемешивания элементов массива. Он не очень удачный и является не очень эффективным, поэтому рассмотрим его только в качестве примера.
Напишем собственную функцию для перетасовки элементов массива.

const shuffle = (coll) => {
return Array(coll.length).fill(null) 
// возвращаем новый массив с такой же длиной и заполняем его null
        .map((_, i) => [Math.random(), i])
// на каждой итерации возвращаем новый массив, в котором рандомное число и индекс элемента
        .sort(([a], [b]) => a - b)
// сортируем по рандомному элементу в порядке возрастания
        .map(([, i]) => coll[i])
// возвращаем элемент по индексу, который был отсортирован
};

console.log(shuffle(numbers)); // => [10, 5, 3, 7, 2, 9, 1, 4, 6, 8]
console.log(shuffle(numbers)); // => [9, 2, 6, 1, 8, 5, 7, 10, 3, 4]
console.log(shuffle(numbers)); // => [8, 7, 10, 6, 3, 2, 9, 5, 4, 1]

Самый оптимальный способ для перемешивания элементов массива - это алгоритм тасования Фишера — Йетса, он рассмотрен выше.

3 года назад

Виктория Аблаева