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

230
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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