Matematica random per trovare Nomi in un arrays mentre non duplica

Quindi voglio trovare tre nomi da una serie di nomi che poi voglio scrivere a una nuova matrix (non è ancora finita però), ma il problema che ho è che continui a randomizzare gli stessi nomi che ho già trovato.

Verifica lo script jsfiddle .

Codice:

findStudentBtn.onclick = findStudent; function findStudent() { var studArray = ["John","Daniel","Hans","Lars","Tom","Amanda","Jane","Sarah"] //1-8 for (i=0; i<3; i++) { if (i=1) { var randomStud1 = studArray[Math.floor(studArray.length * Math.random())]; msg8.innerHTML += randomStud1 + ", "; } if (i=2) { var randomStud2 = studArray[Math.floor(studArray.length * Math.random())]; msg8.innerHTML += randomStud2 + ", "; } if (i=3) { var randomStud3 = studArray[Math.floor(studArray.length * Math.random())]; msg8.innerHTML += randomStud3 + ", "; } if (randomStud1 == randomStud2 || randomStud2 == randomStud3 || randomStud1 == randomStud3){ ms8.innerHTML = ""; findStudent(); } } } 

Per chiunque sia interessato alla soluzione, ma non disposto ad andare al jsfidle, ecco lo script che ho usato.

 findStudentBtn.onclick = function(){ findStudent(); }; var r_stud = ["John","Daniel","Hans","Lars","Tom","Amanda","Jane","Sarah"]; var r_rndm = []; var r_newr = []; function getStudent(){ //if the amount of available people, is to small to reach 3. if(r_rndm.length == r_stud.length){ //reset the random selected arrays r_rndm = []; return r_newr; } //select a student var i_randomStudent = Math.floor(r_stud.length * Math.random()); var s_randomStudent = r_stud[i_randomStudent]; if(r_rndm.indexOf(s_randomStudent) >= 0){ //if it's allready been selected, try again. getStudent(); }else{ //add students to new selection and to alltime selection r_rndm.push(s_randomStudent); r_newr.push(s_randomStudent); //return the new arrays return r_newr; } }; function findStudent(){ //reset new arrays. r_newr = []; for(i = 0; i < 3; i++){ getStudent(); }; //print contents of new arrays to console. console.log(r_newr); for(i = 0; i < r_newr.length; i++){ separator = (i == r_newr.length - 1 && r_rndm.length == 0 ) ? '' : ', '; msg8.innerHTML += r_newr[i] + separator; } };