Можете ли вы использовать функцию Array.sort()
для перемешивания массива - Да.
Достаточно ли случайны результаты - Нет.
Рассмотрим следующий фрагмент кода:
var array = ["a", "b", "c", "d", "e"];
var stats = {};
array.forEach(function(v) {
stats[v] = Array(array.length).fill(0);
});
//stats = {
// a: [0, 0, 0, ...]
// b: [0, 0, 0, ...]
// c: [0, 0, 0, ...]
// ...
// ...
//}
var i, clone;
for (i = 0; i < 100; i++) {
clone = array.slice(0);
clone.sort(function() {
return Math.random() - 0.5;
});
clone.forEach(function(v, i) {
stats[v][i]++;
});
}
Object.keys(stats).forEach(function(v, i) {
console.log(v + ": [" + stats[v].join(", ") + "]");
})
Пример вывода:
a [29, 38, 20, 6, 7]
b [29, 33, 22, 11, 5]
c [17, 14, 32, 17, 20]
d [16, 9, 17, 35, 23]
e [ 9, 6, 9, 31, 45]
В идеале, количество должно быть равномерно распределено (для приведенного выше примера все количество должно быть около 20). Но это не так. По-видимому, распределение зависит от того, какой алгоритм сортировки реализован браузером и как он выполняет итерации элементов массива для сортировки.
Дополнительная информация предоставляется в этой статье:
Array.sort () не должен использоваться для перемешивания массива