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

95
Visualizações
¿Cómo elegir dos índices aleatorios de Array de manera eficiente en javascript sin duplicados?

Tengo una matriz de matrices y necesito elegir 2 combinaciones aleatorias y diferentes de (index1, index2)

Déjame dar un ejemplo

 data = [["a", "b", "c", "d"], ["e", "g"], ["i", "j", "k"]]

Necesito tener (index1: 0 , index2: 2) y (index1: 2 , index2: 1)

¿Cómo puedo lograr eso de manera eficiente?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Primero puedes crear una combinación:

 const i11 = Math.floor(Math.random() * data.length); const i12 = Math.floor(Math.random() * data[i11].length);

Luego puede verificar si la matriz interna tiene solo un elemento. Si tiene un solo elemento y es la primera combinación, debes ignorarlo en los siguientes pasos:

 const dataLength = data[i11].length > 1 ? data.length : data.length - 1;

Ahora puede generar el índice externo para la segunda combinación y ajustarlo:

 let i21 = Math.floor(Math.random() * dataLength); if (i21 >= i11 && data[i11].length === 1) ++i21;

A continuación, puede verificar si el índice externo de la primera combinación y el índice externo de la segunda combinación son iguales y hacer el mismo ajuste para evitar duplicados:

 const innerDataLength = i21 === i11 ? data[i21].length - 1 : data[i21].length;

Finalmente puedes generar el segundo índice interno y ajustarlo.

 let i22 = Math.floor(Math.random() * innerDataLength); if (i21 === i11 && i22 >= i12) ++i22;

Todo el código como una función con una prueba:

 const data = [["a", "b", "c", "d"], ["e", "g"], ["i", "j", "k"]]; function combinations(data) { const i11 = Math.floor(Math.random() * data.length); const i12 = Math.floor(Math.random() * data[i11].length); const dataLength = data[i11].length > 1 ? data.length : data.length - 1; let i21 = Math.floor(Math.random() * dataLength); if (i21 >= i11 && data[i11].length === 1) ++i21; const innerDataLength = i21 === i11 ? data[i21].length - 1 : data[i21].length; let i22 = Math.floor(Math.random() * innerDataLength); if (i21 === i11 && i22 >= i12) ++i22; return [[i11, i12], [i21, i22]]; } console.log(combinations(data)); for (let i = 0; i < 10000; ++i) { const [[i11, i12], [i21, i22]] = combinations(data); if (i11 === i21 && i12 == i22) console.log('Test failed!'); }

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