猜猜我有一个清单与下一个:
20 22 24
如何随机对这三个元素进行排序,以便得到 22、20、24 或 24、20、22 之类的东西?
我知道你可以生成随机数,但我想我不是在寻找那个?
猜猜我有一个清单与下一个:
20 22 24
如何随机对这三个元素进行排序,以便得到 22、20、24 或 24、20、22 之类的东西?
我知道你可以生成随机数,但我想我不是在寻找那个?
例如,您需要实现洗牌算法
var arr = [20, 22, 24];
function shuffleArray(a) { // Fisher-Yates shuffle, no side effects
if(a.length === 0) return a;
var i = a.length, t, j;
a = a.slice();
while (--i) t = a[i], a[i] = a[j = ~~(Math.random() * (i+1))], a[j] = t;
return a;
}
shuffleArray(arr); // [22, 24, 20]
shuffleArray(arr); // [22, 20, 24]
shuffleArray(arr); // [24, 22, 20]
如果您不介意修改原始数组,则比其他选项更简单:
function randomizeArray(arr) {
var output = [];
while (arr.length) {
output.push(arr.splice(Math.floor(Math.random() * arr.length), 1)[0]);
}
return output;
}
这循环遍历原始数组并每次选择一个随机索引,然后将该索引处的元素添加到目标数组并将其从原始数组中删除。然后,重复该过程,直到原始数组为空。
在这里工作演示:http: //jsfiddle.net/jfriend00/7jhs7/