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

184
Visualizações
¿Cómo generar una entrada de matriz aleatoria y luego eliminar ese elemento de la matriz?

En mi programa, cuando el usuario hace clic en un botón, un elemento (una cadena) de una matriz se selecciona aleatoriamente y luego se envía al usuario.

Mi objetivo es introducir algún tipo de funcionalidad de "eliminar este elemento de la matriz después de mostrarlo al usuario", para evitar la repetición de resultados. De esa manera, cada vez que vean un elemento nuevo, no verán los mismos una y otra vez.

Aquí está mi versión v1 de codificar esto:

 Array1 = [] // the full array of all items is contained in here.
Array2 = [] // this is the post-display holding bay for items the user has seen already.

¿Después de enviar un elemento al usuario desde la matriz 1? Ese elemento se agregará a la Matriz 2. ¿ANTES de mostrar cualquier elemento de la matriz a un usuario? Hará una referencia cruzada del elemento seleccionado al azar con la lista completa de elementos en Array2, básicamente usando la lógica IF/ELSE IF. Algo como esto:

 for (let i = 0; i < NumberOfArray2Items; i++) {
 if (Array1ItemToDisplay === Array2[i]) {
 NumberOfMatches = j++ // basically, increment a numerical variable, so that any value
 // greater than 0 indicates, yes, it's been outputted to the user before
 }
}

if (NumberOfMatches === 0) {
 DisplayCurrentArrayItem();
} else if (NumberOfMatches > 0) {
 SelectAnotherArrayItemToDisplay();
}

Esa es una versión aproximada de lo que tengo en mente y, francamente, suena como una solución terrible porque requiere dos pasos programáticos muy largos:

  1. Recorriendo cada elemento individual en Array2 para referencias cruzadas
  2. Potencialmente ejecutando eso docenas, tal vez cientos de veces, si continúa encontrando coincidencias cada vez que ejecuta ese bloque de código.

¿Existe algún método más simple y rápido para hacer una referencia cruzada de un elemento con una matriz completa? ¿O tal vez hacer una referencia cruzada de ambas matrices entre sí, para dejar solo los elementos restantes que no coinciden y luego seleccionar de esa lista intermedia de elementos que aún no se han mostrado?

Estas matrices contendrán decenas de miles de elementos, por lo que mi preocupación es que, tal como está escrito actualmente, este código tardará una eternidad en ejecutarse. ¿Hay alguna solución más simple, rápida y eficiente que no veo?

almost 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Aquí tienes, cada vez que se hace clic en el botón, se muestra un elemento aleatorio de la matriz. Luego, ese elemento se elimina, por lo que no se muestran duplicados.

 const data = ['foo', 'bar', 'bat', 'baz'];

document.getElementById('btn').addEventListener("click", e => {
 if(!data.length) return;
 const idx = Math.floor(Math.random() * data.length);
 console.log(data[idx]);
 data.splice(idx, 1);
});
 <button id=btn>click</button>

También agregué una verificación para asegurarme de que cuando no queden elementos únicos, no suceda nada, no estoy seguro de si esto es lo que quería o no. Si no, elimine la línea if(!data.length) return;

almost 4 years ago · Santiago Trujillo 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