【问题标题】:Random item from the array without repeating elements in Javascript数组中的随机项而不在Javascript中重复元素
【发布时间】:2020-08-16 17:56:34
【问题描述】:

我不希望函数重复从数组中取出的元素

function Gen() {
    let Qu = ["Yazeed", "Ammar", "Marwan", "Othman", "Sameh", "Amro", "Ibraheem"];
    let p1 = document.getElementById("demo1");
    let text = " ";
    for (let i = 0; i < 4; i++) {  //Qu.length = 7
            let p = Qu[Math.floor(Math.random() * Qu.length)];
            text+= "This is " + p  + "<br>";
    }
    p1.innerHTML = text;
}

【问题讨论】:

  • 随机播放并弹出
  • 或者 shuffle 和 shift()
  • @YazeedZaid 见我的answer

标签: javascript arrays loops random


【解决方案1】:

这是一个基于Fischer-Yeats algorithm 的随机播放函数。它与一个临时变量交换并从长度递减。

let names = ["Yazeed", "Ammar", "Marwan", "Othman", "Sameh", "Amro", "Ibraheem"];

function shuffle(array) {
  let qty = array.length, temp, i;
  while (qty) {
    i = Math.floor(Math.random() * qty--);
    temp = array[qty];
    array[qty] = array[i];
    array[i] = temp;
  }
  return array;
}

document.querySelector('output').textContent = shuffle(names);
&lt;output&gt;&lt;/output&gt;

【讨论】:

    【解决方案2】:

    您可以使用splice 将项目显示后从数组中删除。

    如果您不想更改数组,则可以在更改之前创建一个副本。

    let id = Math.floor(Math.random() * Qu.length);
    let p = Qu[id];
    Qu.splice(id, 1);
    text += "This is " + p + "<br>";
    

    工作代码:

    function Gen() {
      let Qu = ["Yazeed", "Ammar", "Marwan", "Othman", "Sameh", "Amro", "Ibraheem"];
      let p1 = document.getElementById("demo1");
      let text = " ";
      for (let i = 0; i < 4; i++) { //Qu.length = 7
        let id = Math.floor(Math.random() * Qu.length);
        let p = Qu[id];
        Qu.splice(id, 1);
        text += "This is " + p + "<br>";
      }
      p1.innerHTML = text;
    }
    <div id="demo1"></div>
    <button type="button" onclick="Gen()">Generate</button>

    【讨论】:

    • 是的。如前所述,它将改变数组。您可以在更改之前创建数组的副本
    【解决方案3】:

    希望对你有所帮助

    function Gen() {
        let Qu = ["Yazeed", "Ammar", "Marwan", "Othman", "Sameh", "Amro", "Ibraheem"];
        var QuNew = Qu.sort(() => Math.random() - 0.5); // <- Make new random array 
        let p1 = document.getElementById("demo1");
        let text = " ";
        for (let i = 0; i < 4; i++) {  //Qu.length = 7
                text+= "This is " + QuNew[i]  + "<br>";
        }
    
        p1.innerHTML = text;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-12
      • 2018-10-23
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多