【问题标题】:How to generate 3 names without the same name repeated [duplicate]如何生成3个没有相同名称重复的名称[重复]
【发布时间】:2017-02-18 05:25:36
【问题描述】:
window.onload = start;

function start () {
  var name = ["Hans","Ole","Nils","Olav","Per","Knut","Kari","Line","Pia"]
  var random = Math.floor(Math.random()*8)
  var random2 = Math.floor(Math.random()*8)
  var random3 = Math.floor(Math.random()*8)
  var name2 = []
  name2.push(name[random])
  name2.push(name[random2])
  name2.push(name[random3])

  for(i=0; i<3; i++) {
  document.getElementById("par").innerHTML += name2[i] + "<br/>" ;
  }
}

到目前为止,使用此代码,我可以从名称数组中生成 3 个随机名称。但我希望这 3 个名字不要重复,我不知道如何做到这一点。

【问题讨论】:

  • 随机播放 3 个。

标签: javascript arrays math random


【解决方案1】:

也许这会有所帮助。我随机化了数组的顺序,然后只选择前三个元素。这允许名称的零重复并在每次运行该函数时生成一个新答案。不确定你的 HTML 是什么样子,所以我只是添加了 id“demo”。

var players = ["Hans","Ole","Nils","Olav","Per","Knut","Kari","Line","Pia"];

function tournament() {
  var names = [];
  players.sort(function(a,b){return 0.5 - Math.random()});
  for (i=0; i<3; i++){
    names.push(players[i]);
  }
  document.getElementById("demo").innerHTML = names;
}

【讨论】:

    【解决方案2】:

    我创建了一个使用递归的解决方案。

    randomNames 函数重复了 3 次。每次调用时,计数都会增加,并且 names 是一个没有已使用名称的数组。它返回一个包含三个随机名称的数组。

    function start () {
      var name = ["Hans","Ole","Nils","Olav","Per","Knut","Kari","Line","Pia"]
    
      function randomNames(count, names) {
        if(count >= 3) return [];
        var random = Math.floor(Math.random()*(names.length-1));
        // remove current name
        var name = names.splice(random, 1);
        return randomNames(++count, names).concat(name);
      }
    
      var random = randomNames(0, name);
    }
    

    【讨论】:

      【解决方案3】:

      您可以对所选项目使用哈希表并进行检查,直到找到所有想要的项目。

      window.onload = start;
      
      function start() {
          var name = ["Hans", "Ole", "Nils", "Olav", "Per", "Knut", "Kari", "Line", "Pia"],
              hash = {},
              random;
      
          while (Object.keys(hash).length < 3) {
              do {
                  random = Math.floor(Math.random() * name.length);
              } while (hash[random])
              hash[random] = true;
              document.getElementById("par").innerHTML += name[random] + "<br/>";
          }
      }
      &lt;div id="par"&gt;&lt;/div&gt;

      ES6 与 Set

      window.onload = start;
      
      function start() {
          var name = ["Hans", "Ole", "Nils", "Olav", "Per", "Knut", "Kari", "Line", "Pia"],
              hash = new Set,
              random;
      
          while (hash.size < 3) {
              do {
                  random = Math.floor(Math.random() * name.length);
              } while (hash.has(random))
              hash.add(random);
              document.getElementById("par").innerHTML += name[random] + "<br/>";
          }
      }
      &lt;div id="par"&gt;&lt;/div&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 2018-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-04
        相关资源
        最近更新 更多