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

152
Vistas
¿Cuál es la forma más eficiente de dividir una matriz de millones de datos según la condición?

Es algo así donde tengo una matriz de london que contiene más de 10 millones de datos

 london = ['dwig7xmW','gIzbnHNI' ...]

Y ahora tengo un userTraveled que también contiene millones de datos

 userTraveled = ['ntuJV09a' ...]

Ahora, ¿cuál es la forma más eficiente de dividir userTraveled en inLondon y notInLondon .

Mi intento.

 inLondon = [] notInLondon = [] userTraveled.forEach((p) => london.includes(p) ? inLondon.push(p) : notInLondon.push(p))
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

london.includes(p) realizará una búsqueda lineal en la matriz. Hacer eso para cada usuario que ha userTraveled es terriblemente ineficiente. Use un Set en su lugar:

 const usersInLondon = [], usersNotInLondon = []; const lookup = new Set(london); for (const p of usersTraveled) { (lookup.has(p) ? usersInLondon : usersNotInLondon).push(p); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedo ofrecer una solución O (n * log (n)) en lugar de su O (n ^ 2), primero ordene las contraseñas y luego use la búsqueda binaria en lugar de incluir para buscar un elemento

Espero que ayude =)

 const london = ['dwig7xmW','gIzbnHNI'] const userTraveled = ['ntuJV09a', 'dwig7xmW'] let inLondon = [] let notInLondon = [] const sortedlondon=london.sort(); userTraveled.forEach((p) => (binarySearch(sortedlondon,p)!=-1 ? inLondon.push(p) : notInLondon.push(p))) //https://www.htmlgoodies.com/javascript/how-to-search-a-javascript-string-array-using-a-binary-search/ function binarySearch(items, value){ var startIndex = 0, stopIndex = items.length - 1, middle = Math.floor((stopIndex + startIndex)/2); while(items[middle] != value && startIndex < stopIndex){ //adjust search area if (value < items[middle]){ stopIndex = middle - 1; } else if (value > items[middle]){ startIndex = middle + 1; } //recalculate middle middle = Math.floor((stopIndex + startIndex)/2); } //make sure it's the right value return (items[middle] != value) ? -1 : middle; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Espero que no estés usando estos datos de forma incorrecta.

 const passwords = ['a', 'b'] const rawPasswords = ['c', 'b']; const setPasswords = new Set(passwords) const uniquePassword = []; const usedPassword = []; rawPasswords.forEach(rp => { if (setPasswords.has(rp)) { usedPassword.push(rp) } else { uniquePassword.push(rp) } }) console.log(uniquePassword, usedPassword)
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