Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

122
Vistas
¿Cómo hacer que 4 variables siempre tomen valores diferentes de una matriz?

Quiero hacer que cada una de estas cuatro variables siempre tome un valor de "nombre" diferente tomado de la matriz. Quería escribirlo para que verifique si la variable es igual a alguna de las otras, y si lo es, la vuelve a aleatorizar para que sea diferente. Hasta ahora tengo esto:

 const arr = [{name:"a"},{name:"b"},{name:"c"},{name:"d"},{name:"e"},{name:"f"}] function myFunction() { let var1 = arr[Math.floor(Math.random() * arr.length)].name; let var2 = arr[Math.floor(Math.random() * arr.length)].name; let var3 = arr[Math.floor(Math.random() * arr.length)].name; let var4 = arr[Math.floor(Math.random() * arr.length)].name; while (var1 == var2 || var1 == var3 || var1 == var4) { var1 = arr[Math.floor(Math.random() * arr.length)].name; } while (var2 == var1 || var2 == var3 || var2 == var4) { var2 = arr[Math.floor(Math.random() * arr.length)].name; } while (var3 == var2 || var3 == var1 || var3 == var4) { var3 = arr[Math.floor(Math.random() * arr.length)].name; } while (var4 == var2 || var4 == var3 || var4 == var1) { var4 = arr[Math.floor(Math.random() * arr.length)].name; } }

Pero no solo no funciona, también tengo un problema en el que las variables aún pueden ser iguales, porque mientras el primer "mientras" las aleatoriza para que sean diferentes de las demás, el siguiente "mientras" puede establecer otra variable sé igual a él.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Intente usar solo un bucle while y pruebe todas las posibilidades. Esta no es una solución escalable, pero si solo necesita 4 valores únicos, entonces esto hará el trabajo. Ni siquiera necesita iniciar las variables, porque desde el principio no están definidas, por lo que en el ciclo obtendrán valores.

 function myFunction() { let var1; let var2; let var3; let var4; while (var1 == var2 || var1 == var3 || var1 == var4 || var2 == var3 || var3 == var4 || var2==var4) { var1 = arr[Math.floor(Math.random() * arr.length)].name; var2 = arr[Math.floor(Math.random() * arr.length)].name; var3 = arr[Math.floor(Math.random() * arr.length)].name; var4 = arr[Math.floor(Math.random() * arr.length)].name; } console.log(var1); console.log(var2); console.log(var3); console.log(var4); } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Primero, baraje aleatoriamente la matriz, luego tome los primeros cuatro valores de la matriz. Esto garantiza que seleccione cuatro elementos distintos de la matriz. También se escala mucho más fácilmente a arreglos más grandes o seleccionando más (o menos) de cuatro elementos, y potencialmente funciona mejor en casos extremos.

 let arr = [{name:"a"},{name:"b"},{name:"c"},{name:"d"},{name:"e"},{name:"f"}]; arr.sort((a, b) => Math.random() < 0.5); let var1 = arr[0].name; let var2 = arr[1].name; let var3 = arr[2].name; let var4 = arr[3].name;

Tenga en cuenta que esto modifica el orden de los elementos en arr , así que realice la operación de clasificación en una copia de esa matriz si necesita conservar el orden de arr .

Además, si bien la técnica de barajar muy simple y fácil de recordar que se muestra aquí es perfectamente adecuada para esta matriz de ejemplo muy pequeña, si está barajando una matriz muy grande, puede considerar los algoritmos de barajado conocidos que funcionan mejor .


Otro enfoque es realizar un seguimiento de los índices de la matriz que ha seleccionado aleatoriamente y generar repetidamente nuevos índices aleatorios para evitar duplicados. Esto evita modificar la matriz arr , que puede ser importante según su caso de uso.

 let arr = [{name:"a"},{name:"b"},{name:"c"},{name:"d"},{name:"e"},{name:"f"}]; function takeUniqueRandom(arr, indexesUsed) { let index = -1; while (index < 0 || indexesUsed.includes(index)) { index = Math.floor(Math.random() * arr.length); } indexesUsed.push(index); return arr[index]; } let indexesUsed = []; let var1 = takeUniqueRandom(arr, indexesUsed).name; let var2 = takeUniqueRandom(arr, indexesUsed).name; let var3 = takeUniqueRandom(arr, indexesUsed).name; let var4 = takeUniqueRandom(arr, indexesUsed).name;
about 4 years ago · Juan Pablo Isaza Denunciar

0

Una forma posible es eliminar el elemento seleccionado del grupo de elementos disponibles.

 function myFunction() { const pool = [...arr]; // <-- make a shallow copy const numberOfRandomsToGet = 4; // <-- number of random elements to get const randomNames = []; // <-- store here the random names for (let n = 0; n < numberOfRandomsToGet; ++n) { let randomIndex = getRandomInt(0, pool.length - 1); // <-- generate random Index const randomElem = pool[randomIndex]; // <-- get random element at randomIndex if (randomElem) { pool.splice(randomIndex, 1); // remove selected element from the "pool" randomNames.push(randomElem.name); // add name } } console.log(randomNames); // dump generated random names to console }

Apilamiento de trabajo

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda