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

231
Views
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
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!