我试图在多维数组中列出1-400之间的所有数字。
我不想要任何重复的数字(1只会在数组中一次,18,100,385等等)我不希望这些数字完全按顺序排列,我想要它们在随机位置放置在数组中..
示例(我是从1-10手工制作的):
var pairs =[
[3, 9],
[6, 4],
[2, 1],
[5, 8],
[7, 10],
//... and up to
[185, 400]
]
那么,有没有办法让javascript自动创建一个这样的数组,但更大的数字呢? 谢谢你的帮助!
答案 0 :(得分:5)
您可以使用标准 Fisher-Yates shuffle 算法,如下所示:
function generateRandomPairs(numberOfPairs)
{
var i, j, numbers, tmp, pairs;
// fill array
numbers = [];
for (i = 0; i < numberOfPairs * 2; i++)
{
numbers[i] = i + 1;
}
// randomize array really good
for (i = 0; i < numberOfPairs * 2 - 1; i++)
{
j = Math.floor(Math.random() * (numberOfPairs * 2 - i)) + i;
// swap element i with element j
tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
// transform linear array to pairs
pairs = [];
for (i = 0; i < numberOfPairs * 2; i += 2)
{
pairs.push([ numbers[i], numbers[i + 1] ]);
}
return pairs;
}
答案 1 :(得分:2)
答案 2 :(得分:0)
试试这个:
function range(from, to){
for(var i=0,n=from,r=[]; n<=to; i++,n++){
r[i] = n;
}
return r;
}
function shuffle(array){
for(var i=0,l=array.length,n,t,r=[]; i<l; i++){
n = Math.floor(Math.random()*(i+1)); t = array[i]; r[i] = array[n]; r[n] = t;
}
return r;
}
function randPairsFromRange(rangeArray){
var l = rangeArray.length;
if(l % 2 !== 0){
return false;
}
for(var i=0,n=1,s=shuffle(rangeArray),r=[]; i<l; i+=2,n+=2){
r.push([s[i], s[n]]);
}
return r;
}
console.log(randPairsFromRange(range(1,400)));