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

175
Visualizações
¿Cómo recalcular una matriz de objetos a partir de objetos anidados?

Tengo una matriz de objetos donde Citems es una matriz de objetos. Cada objeto tiene estado activado o desactivado y hora.

 [ { Chapter: [ { Cname: 'chapter 1', Citems: [{status: 'on', time: 30},{status: 'on', time: 60}], }, { Cname: 'chapter 2', Citems: [{status: 'on', time: 30},{status: 'off', time: 60}] } ], name: 'Something', description: 'jfdgljfgdfjgldfkjglfd' },{ Chapter: [ { Cname: 'chapter 1', Citems: [{status: 'on', time: 30},{status: 'on', time: 60}], }, { Cname: 'chapter 2', Citems: [{status: 'on', time: 30},{status: 'off', time: 60}] } ], name: 'Something', description: 'jfdgljfgdfjgldfkjglfd' },{ Chapter: [ { Cname: 'chapter 1', Citems: [{status: 'on', time: 30},{status: 'on', time: 60}], }, { Cname: 'chapter 2', Citems: [{status: 'on', time: 30},{status: 'off', time: 60}] } ], name: 'Something', description: 'jfdgljfgdfjgldfkjglfd' } ]

Quiero generar una matriz u objeto a partir de él que muestre el tiempo total para cada estado como se muestra a continuación

 [{ on: 120, off: 60 }, { on: 120, off: 60 }, { on: 120, off: 60 }]

Intenté usar el mapa y reducirlo al no obtener el resultado deseado.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Estabas en el camino correcto usando map() y reduce() . Una llamada adicional a flatMap() y algo de desestructuración lo reúne todo:

 const result = data.map(({ Chapter }) => Chapter .flatMap(({ Citems }) => Citems) .reduce((a, { status, time }) => ({ ...a, [status]: (a[status] || 0) + time }), {}) );

Fragmento completo:

 const data = [{ Chapter: [{ Cname: 'chapter 1', Citems: [{ status: 'on', time: 30 }, { status: 'on', time: 60 }], }, { Cname: 'chapter 2', Citems: [{ status: 'on', time: 30 }, { status: 'off', time: 60 }] } ], name: 'Something', description: 'jfdgljfgdfjgldfkjglfd' }, { Chapter: [{ Cname: 'chapter 1', Citems: [{ status: 'on', time: 30 }, { status: 'on', time: 60 }], }, { Cname: 'chapter 2', Citems: [{ status: 'on', time: 30 }, { status: 'off', time: 60 }] } ], name: 'Something', description: 'jfdgljfgdfjgldfkjglfd' }, { Chapter: [{ Cname: 'chapter 1', Citems: [{ status: 'on', time: 30 }, { status: 'on', time: 60 }], }, { Cname: 'chapter 2', Citems: [{ status: 'on', time: 30 }, { status: 'off', time: 60 }] } ], name: 'Something', description: 'jfdgljfgdfjgldfkjglfd' }]; const result = data.map(({ Chapter }) => Chapter .flatMap(({ Citems }) => Citems) .reduce((a, { status, time }) => ({ ...a, [status]: (a[status] || 0) + time }), {}) ); console.log(result);

about 4 years ago · Juan Pablo Isaza Relatório

0

Lo hice usando map y flatMap .

 data.map(({ Chapter }) => { let on = 0; let off = 0; Chapter.flatMap(({ Citems }) => Citems).map((item) => { if (item.status === "on") { on += item.time; } else { off += item.time; } }); return { on, off }; }); 

 const data = [ { Chapter: [ { Cname: "chapter 1", Citems: [ { status: "on", time: 30 }, { status: "on", time: 60 } ] }, { Cname: "chapter 2", Citems: [ { status: "on", time: 30 }, { status: "off", time: 60 } ] } ], name: "Something", description: "jfdgljfgdfjgldfkjglfd" }, { Chapter: [ { Cname: "chapter 1", Citems: [ { status: "on", time: 30 }, { status: "on", time: 60 } ] }, { Cname: "chapter 2", Citems: [ { status: "on", time: 30 }, { status: "off", time: 60 } ] } ], name: "Something", description: "jfdgljfgdfjgldfkjglfd" }, { Chapter: [ { Cname: "chapter 1", Citems: [ { status: "on", time: 30 }, { status: "on", time: 60 } ] }, { Cname: "chapter 2", Citems: [ { status: "on", time: 30 }, { status: "off", time: 60 } ] } ], name: "Something", description: "jfdgljfgdfjgldfkjglfd" } ]; const result = data.map(({ Chapter }) => { let on = 0; let off = 0; Chapter.flatMap(({ Citems }) => Citems).map((item) => { if (item.status === "on") { on += item.time; } else { off += item.time; } }); return { on, off }; }); console.log(result);

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