Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

127
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda