【问题标题】:Javascript : Making an random array [duplicate]Javascript:制作一个随机数组[重复]
【发布时间】:2012-10-23 20:57:05
【问题描述】:

可能重复:
Generate unique number within range (0 - X), keeping a history to prevent duplicates

编写一个生成随机数组的函数,如下所示:

随机数组(10)

=> [0,2,3,9,6,5,4,7,8,1]

:(

我在上学的时候不学习编程,所以我写了一个丑陋的。这是我的程序。

var min = 0,
    max = 15,  //Here generate an random array from 0-14
    i,
    j,
    arr = [],
    temp = [];

for (i = min;i<max; i++){
    arr.push(i);
}

for(j=min;j<1000;j++){
   temp.push(arr[Math.floor(Math.random() * arr.length)]);  
}
function unique(array){
      var b = [];
      for(var i=0; i<array.length; i++){
         if(b.indexOf(array[i]) == -1) b.push(array[i]);
      }
      return b;
}
alert(unique(temp));

这个程序是我在网上搜索写的,我觉得不完美,里面没有算术...

【问题讨论】:

  • 程序的输出有不同的任务和目标。告诉我们你想从你的脚本中得到什么。

标签: javascript random


【解决方案1】:

这是一种方法:

var RandomArray = function RandomArray(elements) {
    var min = 0,        //min random number
        max = 15,       //max random number
        i,              //incrementer
        arr = [];       //output
    //generate an array of length (elements) containing random number from min to max
    for (i = 0; i < elements; i += 1) {
        arr.push(Math.floor(Math.random() * (max + 1)) + min);
    }
    //return the array
    return arr;
};

​这里有一个小提琴:http://jsfiddle.net/mKFk9/

【讨论】:

  • 这恰好适用于min = 0,但实际上您使用的是区间minmin + max
  • 可以,但是随机数组的编号必须唯一。
【解决方案2】:

这可能是你需要的:

/**
* range Get an array of numbers within a range
* @param min {number} Lowest number in array
* @param max {number} Highest number in array
* @param rand {bool} Shuffle array
* @return {array}
*/
function range( min, max, rand ) {
  var arr = ( new Array( ++max - min ) )
    .join('.').split('.')
    .map(function( v,i ){ return min + i })
  return rand
    ? arr.map(function( v ) { return [ Math.random(), v ] })
       .sort().map(function( v ) { return v[ 1 ] })
    : arr
}

演示: http://jsfiddle.net/elclanrs/QBVbr/

【讨论】:

    【解决方案3】:
    function randomArray(n) {
    
      var array = [];
      for (i = 0; i < n; i++) {
        array[i] = i;
      }
      var newArray = [];
      for (i = 0; i < n; i++) {
        var num = Math.round(Math.random() * (n - i - 1));
        newArray[i] = array[num];
        array.splice(num, 1);
      }
      alert(newArray);
    }
    randomArray(100);
    

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 2012-12-11
      • 2014-10-17
      相关资源
      最近更新 更多