如何在Javascript中随机化数组的子集?

时间:2010-10-26 20:51:45

标签: javascript

在Javascript

中随机化部分数组的最佳方法是什么?

例如,如果我在数组中有100个项目,那么每10次随机化一组的快速有效方法是什么。 0到9之间的项目在数据项[0]到项目[9]中是随机的。 10到19之间的项目在数据项[10]到项目[19]等中随机化。等等。

4 个答案:

答案 0 :(得分:3)

您可以调整此处描述的数组随机播放方法:http://jsfromhell.com/array/shuffle

它基于Fisher-Yates(Knuth)算法(http://en.wikipedia.org/wiki/Fisher-Yates_shuffle)。

答案 1 :(得分:1)

我只想使用内置的slice,concat和sort方法。这样的事情。

function shuffle(arr, start, end) {
 return arr.slice(start, end).sort(function() { return .5 - Math.random(); }).concat(arr.slice(end));
};

这是基本的想法,你可能想要制作一个算法来分割每10个元素,排序并重新加入这些集合。

编辑:请阅读以下评论,了解为什么此解决方案可能不适合您的需求。

答案 2 :(得分:0)

我会将1个数组拆分为10个子集,然后在这些子集上执行您选择的随机算法,然后以正确的顺序重新组合。

答案 3 :(得分:0)

以下内容随机播放指定的数组块,就像环境的随机数生成器允许的那样随机:

function shuffleSubarray(arr, start, length) {
    var i = length, temp, index;
    while (i--) {
        index = start + Math.floor(i * Math.random());
        temp = arr[index];
        arr[index] = arr[start + i];
        arr[start + i] = temp;
    }
    return arr;
}

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
alert( shuffleSubarray(a, 2, 5) );