Случайный элемент из массива без повторяющихся элементов в Javascript - PullRequest
0 голосов
/ 02 мая 2020

Я не хочу, чтобы функция повторяла элементы, взятые из массива

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;
}

Ответы [ 3 ]

0 голосов
/ 02 мая 2020

Вы можете использовать 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>
0 голосов
/ 02 мая 2020

Надеюсь, я вам помог

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;
}
0 голосов
/ 02 мая 2020

Вот случайная функция, основанная на алгоритме Фишера-Йейтса . Он заменяется временной переменной и уменьшается от длины.

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);
<output></output>
...