Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

252
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda