猜我有下一个列表:
20 22 24
如何随机排序这三个元素,以便得到像22,20,24或24,20,22这样的东西?
我知道你可以生成随机数,但我想我不是在寻找那个?
答案 0 :(得分:3)
您需要实现一个shuffle算法,例如
var arr = [20, 22, 24];
function shuffleArray(a) { // Fisher-Yates shuffle, no side effects
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]
答案 1 :(得分:0)
如果您不介意修改原始数组,则比其他选项稍微简单一些:
function randomizeArray(arr) {
var output = [];
while (arr.length) {
output.push(arr.splice(Math.floor(Math.random() * arr.length), 1)[0]);
}
return output;
}
这循环遍历原始数组并每次选择一个随机索引,然后将该索引处的元素添加到目标数组并将其从原始数组中删除。然后,重复进程直到原始数组为空。