javascript随机排序列表

时间:2013-06-14 22:36:22

标签: javascript list sorting

猜我有下一个列表:

20 22 24

如何随机排序这三个元素,以便得到像22,20,24或24,20,22这样的东西?

我知道你可以生成随机数,但我想我不是在寻找那个?

2 个答案:

答案 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;
}

这循环遍历原始数组并每次选择一个随机索引,然后将该索引处的元素添加到目标数组并将其从原始数组中删除。然后,重复进程直到原始数组为空。

此处的演示演示:http://jsfiddle.net/jfriend00/7jhs7/