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

247
Vistas
JavaScript, divide el objeto en 2 y empuja la matriz

Tengo una serie de objetos como este:

 const arrayOfObjects = [ { A: 1, B: 2, C: 3 }, { A: 3, B: 4, C: 1 } ]

Y otra matriz que se llama "encabezados"

 const headers = [ ['A', 'B'], ['C'] ]

Tengo que crear una matriz similar a la primera pero con esos objetos divididos por los headers que tienen en sus matrices.

Este debería ser el objetivo:

 const result = [ [ { A: 1, B: 2 }, { C: 3 } ], [ { A: 3, B: 4 }, { C: 1 } ] ]

Lo intenté haciendo una matriz "base" con:

 const baseArray = [] headers.forEach((header) => { const objFromHeader = {}; header.forEach((head) => { objFromHeader[head] = 0; }); baseArray.push(objFromHeader); });

Eso me dará la matriz de result pero con 0 valores para cada clave.

Y luego haga un bucle para la primera matriz y coloque dentro de otra matriz la matriz base con los valores correctos.

Luego, quise completar cada clave de acuerdo con el valor que proviene de arrayOfObjects , pero aquí es donde no puedo ver cómo podría hacer un bucle en esa matriz de objetos y poner el valor correcto. El único problema con ese enfoque es que la matriz de result tendrá algunos valores 0 que provienen de la matriz de iniciación que estoy usando, sería mejor para mí solo poner los objetos que realmente tienen valores y no 0 (estaba pensando en otra función para eliminar esas claves con valor = 0...)

¿Cómo podría lograrlo de una mejor manera?

Violín:

https://jsfiddle.net/pmiranda/Lpscz6vt/

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

 const arrayOfObjects = [ { A: 1, B: 2, C: 3 }, { A: 3, B: 4, C: 1 }, ]; const headers = [['A', 'B'], ['C', 'D']]; const result = arrayOfObjects.map((obj) => headers.map((header) => header.reduce((acc, key) => { acc[key] = obj[key]; return Object.keys(acc).reduce((newAcc, key) => { if (acc[key]) { newAcc[key] = acc[key]; } return newAcc; } , {}); }, {}) ) ); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Al iterar sobre un objeto, use findIndex en los headers para identificar en qué índice de la matriz de encabezados debe ir la propiedad que se está iterando. Cree un objeto allí si aún no existe y establezca la propiedad.

 const arrayOfObjects = [ { A: 1, B: 2, C:3 }, { A: 3, B: 4, C:1 } ]; const headers = [ ['A', 'B'], ['C'] ]; const toResultItem = (object) => { const resultItem = []; for (const [key, value] of Object.entries(object)) { const headersIndex = headers.findIndex(arr => arr.includes(key)); resultItem[headersIndex] ??= {}; resultItem[headersIndex][key] = value; } return resultItem; }; console.log(arrayOfObjects.map(toResultItem));

about 4 years ago · Juan Pablo Isaza Denunciar

0

Implementación Array.forEach

Lógica

  • Recorra la matriz arrayOfObjects .
  • Dentro de eso, recorra la matriz de headers .
  • Dentro de eso, recorra cada matriz en la matriz de headers .
  • Cree un objeto vacío y asigne la propiedad de los nodos en la matriz de headers con valores de los objetos en la matriz arrayOfObjects .

 const arrayOfObjects = [ { A: 1, B: 2, C: 3 }, { A: 3, B: 4, C: 1 } ]; const headers = [ ['A', 'B'], ['C'] ]; const baseArray = [] arrayOfObjects.forEach((obj) => { const childNode = []; headers.forEach((head) => { const node = {}; head.forEach((key) => node[key] = obj[key]); childNode.push(node); }); baseArray.push(childNode); }); console.log(baseArray)

Implementación de Array.map y Array.reduce .

Usando los mismos implementos lógicos en la solución anterior, podemos reescribir esto usando Array.map y Array.reduce como se muestra a continuación.

 const arrayOfObjects = [ { A: 1, B: 2, C: 3 }, { A: 3, B: 4, C: 1 } ]; const headers = [ ['A', 'B'], ['C'] ]; const output = arrayOfObjects.map((obj) => { return headers.map((header) => { return header.reduce((acc, curr) => { acc[curr] = obj[curr]; return acc; }, {}); }) }) console.log(output);

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