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

224
Vistas
Cómo transmitir matrices grandes a través de filter () y combinarlas por ID

Tengo un archivo con 2 matrices grandes, el archivo ocupa aproximadamente 2 GB. Quiero combinar ambas matrices por id. El problema es que las matrices son demasiado grandes. Por lo general, solo mapearía a través de arrayMain, tomaría la ID y luego filtraría arrayItems por esa ID. Creo que el problema es que almaceno todos los resultados en la memoria y no hay suficiente memoria para esta operación.

Así es como normalmente habría combinado ambas matrices y el resultado esperado:

 const composed = arrayMain.map((d) => { return { ...d, data: arrayItems.filter(({ ID }) => d.ID === ID), }; }); const arrayMain = [ { ID: 30574062, number: 28234702, place: London, }, { ID: 30574063, number: 45232502, place: Paris, }, ... ]; const arrayItems = [ //Objects with the same ID are not necessarily next to one another. { "ID": 30574062, "anotherNumber": "52,3", "color": "red" }, { "ID": 30574062, "anotherNumber": "13", "color": "yellow" }, { "ID": 30574063, "anotherNumber": "60,6", "color": "blue" }, ... ] //expected result [ { ID: 30574062, number: 28234702, place: London, data: [ { "anotherNumber": "52,3", "color": "red" }, { "anotherNumber": "13", "color": "yellow" } ] }, { ID: 30574063, number: 45232502, place: Paris, data: [ { "anotherNumber": "60,6", "color": "blue" }, ] }, ... ]

Si entiendo las transmisiones correctamente, tengo que mapear a través de arrayMain y tomar una identificación. Luego transmita objetos desde arrayItems y filtre esa transmisión según la ID. Después de eso, tengo que crear una secuencia de escritura para escribir los resultados en otro archivo.

 const stream = fs.createReadStream(filepath) .pipe(composed()) //composed is a function in this case, idea is the same as above .pipe(filepath) //write data to a new file

Solo escribir resultados produce Error: Cannot create a string longer than 0x3fffffe7 characters

 const stream = fs.createWriteStream(filepath, { flags:'a' }); stream.write('['); const CHUNK_LENGTH = 20; for (let i = 0; i < composed.length; i += CHUNK_LENGTH) { const chunkStr = JSON.stringify( composed.slice(i, i + CHUNK_LENGTH) ); stream.write(chunkStr); } stream.write(']');
about 4 years ago · Juan Pablo Isaza
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