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

112
Visualizações
Angular/Javascript - Problema con la transformación de objetos de matriz

necesitaría su ayuda, después de recibir los datos de esta manera de una llamada api:

 response = [ { area: "Z", val: "work", count: 12, data: "2022-03-01T00:00:00" }, { area: "Z", val: "not work", count: 41, data: "2022-04-01T00:00:00" }, { area: "R", val: "work", count: 55, data: "2022-03-01T00:00:00" }, { area: "R", val: "not work", count: 62, data: "2022-04-01T00:00:00" } ];

Necesito un método para transformar dinámicamente este objeto en:

 [ {area:'Z',count:['03-2022':{'work':12},'04-2022':{'not work':41}]}, {area:'R',count:['03-2022':{'work':55},'04-2022':{'not work':62}]]} ]

Gracias

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

0

ya que su count no es una sintaxis válida. Supuse que es una matriz de objetos.
Estos problemas de agrupación se resuelven fácilmente usando reduce

 const response = [{ area: "Z", val: "work", count: 12, data: "2022-03-01T00:00:00" },{ area: "Z", val: "not work", count: 41, data: "2022-04-01T00:00:00" },{ area: "R", val: "work", count: 55, data: "2022-03-01T00:00:00" },{ area: "R", val: "not work", count: 62, data: "2022-04-01T00:00:00" }]; const res = Object.values(response.reduce((acc,{area,val,count,data}) => { if(!acc[area])acc[area]={area: area, count:[]} acc[area]['count'].push({[data.substring(0,7)] : {[val]:count}}) return acc },{})) console.log(res)

about 4 years ago · Juan Pablo Isaza Relatório

0

Si está abierto a usar lodash o guión bajo , aquí hay una solución:

 const response = [{ area: "Z", val: "work", count: 12, data: "2022-03-01T00:00:00" }, { area: "Z", val: "not work", count: 41, data: "2022-04-01T00:00:00" }, { area: "R", val: "work", count: 55, data: "2022-03-01T00:00:00" }, { area: "R", val: "not work", count: 62, data: "2022-04-01T00:00:00" } ]; const group = _.groupBy(response, 'area'); const result = _.map(_.keys(group), i => { return { area: i, count: _.map(group[i], j => { return { [j.data.substring(0, 7)]: { [j.val]: j.count } } }) } }) console.log('result', result)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

Esta es una solución simple de JS.

 const response = [{ area: "Z", val: "work", count: 12, data: "2022-03-01T00:00:00" }, { area: "Z", val: "not work", count: 41, data: "2022-04-01T00:00:00" }, { area: "R", val: "work", count: 55, data: "2022-03-01T00:00:00" }, { area: "R", val: "not work", count: 62, data: "2022-04-01T00:00:00" } ]; const groupBy = (arr, key) => { const initialValue = {}; return arr.reduce((acc, cval) => { const myAttribute = cval[key]; acc[myAttribute] = [...(acc[myAttribute] || []), cval] return acc; }, initialValue); }; const group = groupBy(response, 'area'); const result = Object.keys(group).map(i => { return { area: i, count: group[i].map(j => { return { [j.data.substring(0, 7)]: { [j.val]: j.count } } }) } }) 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