0

猜猜我有一个清单与下一个:

20 22 24

如何随机对这三个元素进行排序,以便得到 22、20、24 或 24、20、22 之类的东西?

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

4

2 回答 2

3

例如,您需要实现洗牌算法

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]
于 2013-06-14T22:39:39.183 回答
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/

于 2013-06-14T22:54:46.110 回答