Tengo la siguiente tarea: formar una matriz de valores. Necesito elegir 2 valores que no sean iguales. Quiero hacerlo con lógica if / loop para entender la base. Tuve éxito con mi tarea, pero me parece que mi ciclo no termina y la página después de varias actualizaciones falla.
Estaremos muy agradecidos por la ayuda con mi código.
var arrP = []; var randomPersons = 2; var nsm = ["Value 1", "Value 2", "Value 3", "Value 4", "Value 5"]; function randomGen() { for (i=0; i<randomPersons; i++) { var rnd = Math.floor(Math.random() * (nsm.length)); arrP.push(rnd); } } do { randomGen(); } while (arrP[0] === arrP[1]); document.write(nsm[arrP[0]] + "<br>" + nsm[arrP[1]]); <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title></title> </head> <body> </body> </html>Una implementación bastante ingenua podría ser algo como esto. (Algo más optimizado no necesitaría modificar la matriz de entrada, por ejemplo).
Asume que el arr es una "bolsa" de opciones y en realidad no considera la igualdad en absoluto. En otras palabras, si su "bolsa" es ["John", "John", "Peasoup", "Booze", "Scaffold"] , es posible obtener dos Johns en la salida.
function pickRandom(arr, num) { const output = []; const input = [...arr]; // shallow-copy so we can modify it // work to do and choices to pick? while(input.length > 0 && output.length < num) { // Pick random remaining index... const index = Math.floor(Math.random() * input.length); const [pick] = input.splice(index, 1); // Remove from input output.push(pick); // ... put into output } return output; } var picks = pickRandom(["Value 1", "Value 2", "Value 3", "Value 4", "Value 5"], 2); document.getElementById("x").value = JSON.stringify(picks, null, 2); <textarea id="x" rows="10" cols="30"></textarea>