ไม่ถูกต้อง การใช้ Array.sort(() => Math.random() - 0.5) ไม่ให้การสุ่มที่กระจายตัวสม่ำเสมอ (biased) เพราะ sort algorithm ไม่ได้ออกแบบมาสำหรับสุ่ม
วิธีที่ถูกต้องคือ Fisher-Yates Shuffle Algorithm:
function shuffleArray(arr) {
var tmp, current;
var top = arr.length;
if(top) while(--top) {
current = Math.floor(Math.random() * (top + 1));
tmp = arr[current];
arr[current] = arr[top];
arr[top] = tmp;
}
return arr;
}
อัลกอริทึมนี้ให้การสุ่มที่ uniform และมีประสิทธิภาพ O(n)