【问题标题】:How to avoid and make sure about my random number un repeated..?如何避免并确保我的随机数不重复..?
【发布时间】:2013-06-04 09:04:29
【问题描述】:

在我的应用程序中,我使用来自 jqueryui 的 datepicker,它需要每个输入元素的唯一 ID。为此,

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

   var x = 100;

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

我的问题是,我如何保证没有随机数不会重复。所以,我可以避免重复的 id。

提前谢谢..

【问题讨论】:

  • 增量而不是随机怎么样?
  • 创建一个全局变量并在每次创建新的input 元素时递增它
  • 我认为您可以使用每个循环来遍历所有输入并使用索引来附加 Ids 来设置唯一 Ids。
  • @3gwebtrain 为什么不使用类而不是 ID 来绑定 datepicker?

标签: jquery


【解决方案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);
});

您可能会得到一个已经使用的号码,因此如果有必要,您应该创建一个循环,该循环仅在创建新的未使用号码时才结束

【讨论】:

  • 对变量/控件 ID 使用随机数是个坏主意。然后每次添加新值时都必须检查该值是否已被再次使用?这不是对性能造成不必要的负担吗???
  • 哇,随机控制 ID 被选为答案...这个网站正在流失...
【解决方案2】:

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

【讨论】:

  • 是回答还是评论?我认为这应该在评论部分,因为它不是所描述问题的答案。
  • 你是对的,但我不应该给一个更好的解决方案,而不是给一个坏问题的答案吗?
  • 我同意 FC,对变量/控制 id 使用随机数是个坏主意。然后每次添加新值时都必须检查该值是否已被再次使用?可笑...
  • 即使你在克隆,答案也是一样的。只需增加 ID 计数器并将结果提供给您的克隆!
【解决方案3】:

不要使用随机数,而是使用计数器。

var x = 100;

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

【讨论】:

    【解决方案4】:
    //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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      相关资源
      最近更新 更多