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

226
Views
¿Cómo crear una matriz de elementos combinados a partir de 2 elementos correspondientes, cada uno de otra matriz adicional, utilizando (principalmente) métodos de matriz?

He convertido archivos de texto basados en CSV en matrices que contienen encabezados y filas, y ahora quiero convertirlos en la solución dada a continuación. ¿Alguien puede hacer esto usando métodos como map , reduce o lo que sea?

Las matrices que tengo son:

 let header = ['a', 'b', 'c', 'd']; let rows = ['1,2,3,4', '5,6,7,8', '9,0,1,2'];

El resultado que quiero es:

 [{ a: 1, b: 2, c: 3, d: 4, }, { a: 5, b: 6, c: 7, d: 8, }, { a: 9, b: 0, c: 1, d: 2, }]

Pude hacer esto usando for loop pero esa no era la solución apropiada para es6.

Arriba mencioné algunas matrices ficticias, en este momento el código real es:

 const recordReader = content => { let weatherRecords = []; let rows = content.split('\n'); let headers = rows.shift().split(','); for (let row = 0; row < rows.length; row++) { let weatherReading = {}; if (!rows[row]) { continue; } let record = rows[row].split(','); for (let column = 0; column < headers.length; column++) { weatherReading[headers[column]] = record[column]; } weatherRecords.push(weatherReading); } return weatherRecords; };
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Podría mapear las filas y reducir la fila a un objeto:

 const header = ['a', 'b', 'c', 'd']; const rows = ['1,2,3,4', '5,6,7,8', '9,0,1,2']; const result = rows.map((row) => row.split(',').reduce( (obj, cell, i) => ({ ...obj, [header[i]]: Number(cell), }), {} ) ); console.log(result)

about 4 years ago · Juan Pablo Isaza Report

0

con una combinación de map y reduce:

 const header = ['a', 'b', 'c', 'd']; const rows = ['1,2,3,4', '5,6,7,8', '9,0,1,2']; const res = rows.map(row => { const columns = row.split(','); return columns.reduce( (acc,cur,i) => ({...acc,[header[i]]:cur}) , {}) } ); console.log(res);

Esto admite una sola línea, pero creo que no está muy claro para ver lo que hace:

 const header = ['a', 'b', 'c', 'd']; const rows = ['1,2,3,4', '5,6,7,8', '9,0,1,2']; const res = rows.map(row => row.split(',').reduce( (acc,cur,i) => ({...acc,[header[i]]:cur}) , {})); console.log(res);

about 4 years ago · Juan Pablo Isaza Report

0

Puede .map() sus elementos de rows a objetos. Para crear el objeto, puede tomar la cadena de números y dividirlos en una matriz, en la que luego usa .map() para tomar los valores numéricos y el encabezado asociado de los headers usando el índice del número actual ( i ) . Al colocarlos en una matriz de pares [key, value] , puede llamar a Object.fromEntries() para construir su objeto. El siguiente también usa el operador unario más ( + ) para convertir su dígito de cadena en un número:

 const header = ['a', 'b', 'c', 'd']; const rows = ['1,2,3,4', '5,6,7,8', '9,0,1,2']; const res = rows.map(item => Object.fromEntries(item.split(',').map((n, i) => [header[i], +n])) ); console.log(res);

Tenga en cuenta que lo anterior usa Object.fromEntries() que se introdujo después de ES6, puede usar Object.assign() para un enfoque similar, que es ES6:

 const header = ['a', 'b', 'c', 'd']; const rows = ['1,2,3,4', '5,6,7,8', '9,0,1,2']; const res = rows.map(item => Object.assign({}, ...item.split(',').map((n, i) => ({[header[i]]: +n}))) ); console.log(res);

about 4 years ago · Juan Pablo Isaza 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!