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

251
Views
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 answers
Answer question

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 Report

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 Report

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