Tengo una lista de miembros del equipo y una lista de 2 sustitutos: team = Samson, Max, Rowan, Flynn, Jack subs = Struan, Harry
Necesito intercambiar aleatoriamente los 2 subs en el equipo. Me estoy atascando porque necesito asegurarme de que solo estos 2 elementos se intercambien y que ambos se intercambien. Intenté simplemente recorrer la matriz de subs e intercambiar aleatoriamente cada elemento con un elemento de la matriz del team , pero con demasiada frecuencia se intercambió Struan con Max y luego Harry con Struan, de modo que al final Struan todavía estaba en la matriz de subs y no en el team .
Entonces: necesito intercambiar exclusivamente los 2 elementos en la matriz sub con elementos aleatorios de la matriz del team . ¿Cómo puedo hacer eso?
Puedes hacerlo con esta función. Proporcione la función equipo actual y sustituciones y obtenga un nuevo equipo con sustitución aleatoria.
const team = ['Samson', 'Max', 'Rowan', 'Flynn', 'Jack'] const subs = ['Struan', 'Harry'] const substitudePlayers = (team, subs) => { const newTeam = [...team] // get 2 random numbers which are less than team members count function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max-1); return Math.floor(Math.random() * (max - min + 1)) + min; } // 2 random numbers let num1 = getRandomInt(0, team.length) let num2 = getRandomInt(0, team.length) // make sure that numbers are different while(num2 === num1) num2++ // substitude newTeam[num1]=subs[0] newTeam[num2]=subs[1] return newTeam } const substitudedTeam = substitudePlayers(team, subs); console.log(substitudedTeam)Esto debería funcionar:
function getRandomItem () { let randomItem = team[Math.floor(Math.random()*team.length)]; if(subs.indexOf(randomItem)<0){ return randomItem; } else { return getRandomItem(); } } subs.forEach((item,i)=>{ subs.splice(i,1,getRandomItem()); }