数组中有10个不同的数字

10 different number in array

本文关键字:数字 10个 数组      更新时间:2023-09-26

我需要一个数组中的10个不同的随机数

我正在使用以下函数:

    for (k=0;k<10;k++) {
      x[k] = Math.floor((Math.random()*10));
      for (l=0;l<k;l++){
        if (x[l]==x[k]){fail=true;}
      }
      if (fail){k=k-1;}
    }

谢谢你的回答

确保所有变量都声明了:

var x = [], k, l, fail;

确保在内循环之前重置"fail":

  fail = false;
  for (l = 0; l < k; l++)
    // ...

现在,如果你想在一个数组中有10个数字,并且数组有10个元素长,你最好用从1到10(或0到9)的数字填充数组;随便),然后数组进行洗牌。如果你按照自己的方式做事,那么这个过程的表现是不可预测的。当你找到最后几个元素时,可能需要尝试两到三次,或者可能需要数百次;你永远不知道随机数序列会发生什么。

最好用从1到10的数字填充数组,然后对其进行洗牌,如下所示:

var myArray = [1,2,3,4,5,6,7,8,9,10];
//shuffle array
//code from http://stackoverflow.com/a/2450976/1223693
var i = myArray.length, j, temp;
if ( i === 0 ) return false;
while ( --i ) {
   j = Math.floor( Math.random() * ( i + 1 ) );
   temp = myArray[i];
   myArray[i] = myArray[j]; 
   myArray[j] = temp;
}
//done
alert(myArray);

你当前的方法非常慢,因为

  • 它有一个内循环
  • 在生成正确的数字之前可能会多次生成错误的数字

你真的想要一个包含10个元素的数组,这些元素都是0到9之间的随机数,并且它们都不允许相同?所以你想把10个元素中的数字0-9打乱吗?

然后将它们初始化并洗牌:

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]
function shuffle(o){ //v1.0
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};

// init the array:
var a = new Array();
for (var i=0;i<10;i++){
  a.push(i);
} 
// shuffle it.
a = shuffle(a);

可以更简单-

var nums= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].sort(
function(){return Math.random()-.5});