【问题标题】:how to generate random number with no repeat same number again using javascript? [duplicate]如何使用javascript再次生成不重复相同数字的随机数? [复制]
【发布时间】:2013-09-18 12:33:34
【问题描述】:

如何生成不重复相同数字的随机数 1 到 3。 这是我的代码:

function randomFromInterval(from,to)
{ 
var rancalue=Math.floor(Math.random()*(to-from+1)+from);  
return rancalue;
}
var rannumber=randomFromInterval(1,3);

【问题讨论】:

  • 你只需要洗牌吗?
  • 您好,请始终记得先使用 Google。搜索how to generate random number with no repeat same number again using javascript? 时的第一个结果应该可以回答您的问题。
  • @DanielA.White 是正确的 - 将数字 1、2 和 3 放入数组中,然后随机排列数组。
  • 非常感谢您的帮助。

标签: javascript html


【解决方案1】:
  1. 创建一个包含所有数字的数组
  2. 按照问题How can I shuffle an array? 中的描述将数组随机排列
  3. 迭代数组。

【讨论】:

  • 实际上,这比我建议的要好得多。 1+ 不会导致不必要的检查。
  • 你可以随机选择数组的一个成员,不需要洗牌,比如arr.splice(Math.random()*arr.length|0,1)
【解决方案2】:

如果不介意破坏数组,可以从数组中拼接一个随机成员:

var getOne = (function(arr) {
  return function() {
    return arr.splice(Math.random()*arr.length|0,1);
  };
}([1,2,3]));

如果你想在用完数字后重新开始,那么保留原始数组并在每次拼接数组用完成员时复制它:

var getOne = (function(original) {
  var arr = [];
  return function() {
    if (!arr.length) arr = original.concat();
    return arr.splice(Math.random()*arr.length|0,1);
  };
}([1,2,3]));

【讨论】:

  • 你可以通过 jsfiddle 发送。
  • 只是喜欢那些没有礼貌地提供解释的驱动下的选民。
【解决方案3】:

使用here 中的随机播放功能:

<script>
    //+ 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 = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
        return o;
    };
    var random_generator = function(to, from) {
        var nums = [];
        for(var i = to; i <= from; ++i) nums.push(i);

        return function() {
            if(nums.length === 0) return null;
            return shuffle(nums).pop();
        }
    }

    var rand_unique_range = random_generator(10, 100), num;
    while((num = rand_unique_range()) !== null) console.log(num)
</script>

【讨论】:

  • 这不起作用...
  • 你的意思是它不起作用?
猜你喜欢
  • 2011-05-06
  • 1970-01-01
  • 2013-10-22
  • 2011-06-18
  • 2012-06-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
相关资源
最近更新 更多