2012-05-22 76 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以这种方式实现,即该方法会生成一个真正随机的列表 - 因此虽然它现在可以运行,但结果可能会在没有警告的情况下发生变化。下面是Fisher-Yates shuffle的一个实现,它不仅保证产生一个合理的随机分布,而且比被劫持的分类更快。

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