在Javascript
中随机化部分数组的最佳方法是什么?例如,如果我在数组中有100个项目,那么每10次随机化一组的快速有效方法是什么。 0到9之间的项目在数据项[0]到项目[9]中是随机的。 10到19之间的项目在数据项[10]到项目[19]等中随机化。等等。
答案 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) );