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

131
Visualizações
How to create a vanilla groupBy so that it returns an array of objects that have a title?

There is a function that groups an array of objects by key. For example an array:

     data: [
        {
          CS_NAME: "AAA",
          IS_MAIN: "Y",
          WEBSITE_CREATE_DATE: "2021-06-01T15:50:37.687",
        },
        {
          CS_NAME: "AAA",
          IS_MAIN: "N",
          WEBSITE_CREATE_DATE: "2021-08-03T12:02:58.07",
        },
        {
          CS_NAME: "BBB",
          IS_MAIN: "Y",
          WEBSITE_CREATE_DATE: "2021-08-03T12:02:58.07",
        },
        {
          CS_NAME: "BBB",
          IS_MAIN: "N",
          WEBSITE_CREATE_DATE: "2019-01-26T00:00:00",
        },
        {
          CS_NAME: "CCC",
          IS_MAIN: "Y",
          WEBSITE_CREATE_DATE: "2019-01-26T00:00:00",
        },
      ]

Function groupBy:

    groupBy(input, key) {
    
              return input.reduce((acc, currentValue) => {
                let groupKey = currentValue[key];
                if (!acc[groupKey]) {
                  acc[groupKey] = [];
                }
                acc[groupKey].push(currentValue);
                return acc;
              }, {});
            },
        
        let obj = groupBy(data, "CS_NAME");

How to change this function so that it returns an array of objects, each of which will have two fields:

    {
       title: "CS_NAME" // the key by which objects were grouped or any other property
       content: {obj} // the whole object
    }

For example, the output should be like this:

    {
      title: "AAA",
      content: [
        {
          CS_NAME: "AAA",
          IS_MAIN: "Y",
          WEBSITE_CREATE_DATE: "2021-06-01T15:50:37.687",
        },
    
        {
          CS_NAME: "AAA",
          IS_MAIN: "N",
          WEBSITE_CREATE_DATE: "2021-08-03T12:02:58.07",
        },
      ],
    }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

You could map the groupd values and add some properties.

const
    groupBy = (input, key) => input.reduce((acc, currentValue) => {
        (acc[currentValue[key]] ??= []).push(currentValue);
        return acc;
    }, {}),
    data = [{ CS_NAME: "AAA", IS_MAIN: "Y", WEBSITE_CREATE_DATE: "2021-06-01T15:50:37.687" }, { CS_NAME: "AAA", IS_MAIN: "N", WEBSITE_CREATE_DATE: "2021-08-03T12:02:58.07" }, { CS_NAME: "BBB", IS_MAIN: "Y", WEBSITE_CREATE_DATE: "2021-08-03T12:02:58.07" }, { CS_NAME: "BBB", IS_MAIN: "N", WEBSITE_CREATE_DATE: "2019-01-26T00:00:00" }, { CS_NAME: "CCC", IS_MAIN: "Y", WEBSITE_CREATE_DATE: "2019-01-26T00:00:00" }],
    result = Object
        .entries(groupBy(data, "CS_NAME"))
        .map(([title, content]) => ({ title, content }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório

0

You can update your groupBy function as below to get the desired output. Get the output of the current output with Object.entries and map to an array again.

const data = [ { CS_NAME: "AAA", IS_MAIN: "Y", WEBSITE_CREATE_DATE: "2021-06-01T15:50:37.687", }, { CS_NAME: "AAA", IS_MAIN: "N", WEBSITE_CREATE_DATE: "2021-08-03T12:02:58.07", }, { CS_NAME: "BBB", IS_MAIN: "Y", WEBSITE_CREATE_DATE: "2021-08-03T12:02:58.07", }, { CS_NAME: "BBB", IS_MAIN: "N", WEBSITE_CREATE_DATE: "2019-01-26T00:00:00", }, { CS_NAME: "CCC", IS_MAIN: "Y", WEBSITE_CREATE_DATE: "2019-01-26T00:00:00", }, ];

const groupBy = (input, key) => {
  return Object.entries(
    input.reduce((acc, currentValue) => {
      let groupKey = currentValue[key];
      if (!acc[groupKey]) {
        acc[groupKey] = [];
      }
      acc[groupKey].push(currentValue);
      return acc;
    }, {})
  ).map(([title, content]) => ({ title, content }));
};

const obj = groupBy(data, "CS_NAME");

console.log(obj);

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