2012-05-22 3 views

ответ

4

Сначала приготовьте упорядоченный список:

var i, arr = []; 
for (i = 0; i < 50; i++) { 
    arr[i] = i + 1; 
} 

затем перетасовать его.

arr.sort(function() { 
    return Math.random() - 0.5; 
}); 

Я протестировал вышеуказанный метод, и он прошел хорошо. Однако спецификация ECMAScript не требует, чтобы Array.sort был реализован таким образом, что этот метод создает действительно рандомизированный список, поэтому, хотя он может работать и сейчас, результаты могут потенциально измениться без предупреждения. Ниже приведена реализация Shuffle Fisher-Yates, которая не только гарантирует получение разумно случайного распределения, но и быстрее, чем захваченный сорт.

function shuffle(array) { 
    var p, n, tmp; 
    for (p = array.length; p;) { 
     n = Math.random() * p-- | 0; 
     tmp = array[n]; 
     array[n] = array[p]; 
     array[p] = tmp; 
    } 
} 
+0

У вашего кода есть небольшая ошибка, так как я начинаю с 1. Используйте вместо этого метод 'push' массива, чтобы добавить к нему элемент. http://jsfiddle.net/KUfcf/ – ShankarSangoli

+0

Спасибо, исправлено (до комментария на самом деле). 'push' немного медленнее, чем прямое присвоение, поэтому (в данном случае) я считаю, что лучше использовать' [i] '. –

+0

Решение, которое вы предоставили, отлично работает. Спасибо – LiveJin