Как перемешать элементы массива js
Ответы
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