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

Аватар пользователя Aleksandr Litvinov
Aleksandr Litvinov
29 августа 2022

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

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;
}
2 0
Аватар пользователя Виктория Аблаева
Виктория Аблаева
23 октября 2022

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

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]

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

0 0
Познакомьтесь с основами JavaScript бесплатно