如何避免并确保我的随机数不重复..?

时间:2013-06-04 09:04:29

标签: jquery

在我的应用程序中,我使用jqueryui中的datepicker,它需要每个输入元素的唯一id。要做到这一点,

我使用这个功能(例子):

   var x = 100;

    $("a").on("click", function(){
        console.log(Math.floor(Math.random() * x ));
    })

我的问题是,我怎么保证,没有随机数不会重复。所以,我可以避免重复的ID。

提前致谢..

4 个答案:

答案 0 :(得分:1)

使用随机设置自定义ID不是一个好主意。 为什么不为每个元素创建一个数组并增加ID?

答案 1 :(得分:1)

请勿使用随机数,而是使用计数器。

var x = 100;

$("a").on("click", function(){
  x++;
  console.log("id" + x);
});

答案 2 :(得分:1)

var x = 100,
    usedNumbers = [];

$("a").on("click", function(){
    var number = Math.floor(Math.random() * x );

    if ($.inArray(number, usedNumbers)) {
        number = Math.floor(Math.random() * x );
    }
    else {
        usedNumbers.push(number);
    }

    console.log(number);
    console.log(usedNumbers);
});

可能会发生这样的事情,你确实得到了一个已经采用的数字,所以如果有必要,你应该创建一个循环,只有在创建一个新的未被识别的数字后才会完成

答案 3 :(得分:1)

//Object capable of generating random ids through recursion triggered by filtering result

    var uniqueRandom = {
        randoms: [],
        getRandom: function(){
            var random = Math.floor(Math.random() * 10); //Make this your size, I used 10 for easy testing
            if(this.randoms.filter(function(elem){ return elem == random}).length > 0){
               return this.getRandom();
            }else{
               this.randoms.push(random);
               return random;
            }
        }
    }

//Usage
    for(var i = 0; i < 10; i++){
       console.log(uniqueRandom.getRandom());
    }

工作示例 http://jsfiddle.net/q6SRs/1/