Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

170
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!