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

122
Visualizações
How to sort Map array of arrays based on values in Javascript

I have information coming in as a Map in Javascript.

I want to sort it based on types I have set as an enum.

The data looks like this:

Map(5)

{"Adopted" => 105, "Pending" => 176, "Missing" => 3, "InterestedParties" => 45, "WaitingForPickup" => 15}

Though it may make more sense when seen this way:

new Map<string, number>([
  ['Adopted', 105],
  ['Pending', 176],
  ['Missing', 3],
  ['InterestedParties', 45],
  ['WaitingForPickup', 15],
]);

I want to sort this data into categories like "unadopted animals", "homed animals", "Unknown status", so I made a group of data that map to enum types (so AnimalStatusType.Pending is "Pending")

  const metricGroups = {
    unAdopted: [
      AnimalStatusType.Pending,
      AnimalStatusType.InterestedParties,
    ],
    adopted: [
      AnimalStatusType.Adopted,
    ],
    unknown: [
      AnimalStatusType.Missing,
      AnimalStatusType.WaitingForPickup
    ],
  }

I want to end up with my Map sorted by the three different categories adopted, unadopted, and unknown to look something like this:

{
  adopted: [['adopted', 105]],
  unadopted: [['pending', 176],['interestedParties', 45]],
  unknown: [ ['missing', 3],['waitingForPickup', 15]],
}

but I'm having a bit of difficulty finding anything that does the mapping properly. I think maybe combining Array.from or a reduce functionality can work, but searching mostly pulls up Javascript's .map functionality which is not helping.

 const GroupedData =  Array.from(animalData).reduce((acc, metric) => {
        acc[metricGroups[metric]].push(metric)
      })
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

You could just simply reduce your metricGroups object and map the enum values to the appropriate key-value pair in the input.

Note that you cannot sort an object's keys.

const AnimalStatusType = {
  Adopted: 'adopted',
  InterestedParties: 'interestedParties',
  Missing: 'missing',
  Pending: 'pending',
  WaitingForPickup: 'waitingForPickup'
};

const metricGroups = {
  unAdopted: [
    AnimalStatusType.Pending,
    AnimalStatusType.InterestedParties,
  ],
  adopted: [
    AnimalStatusType.Adopted,
  ],
  unknown: [
    AnimalStatusType.Missing,
    AnimalStatusType.WaitingForPickup
  ],
};

const input = { 'Adopted': 105, 'Pending': 176, 'Missing': 3, 'InterestedParties': 45, 'WaitingForPickup': 15 };

const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1);

const result = Object.entries(metricGroups)
  .reduce((acc, [key, value]) => ({
    ...acc,
    [key]: value.map(v => [v, input[capitalize(v)]])
  }), {});

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

about 4 years ago · Juan Pablo Isaza Relatório

0

You can do this with map and Object.entries/Object.fromEntries

const input = new Map([
  ['Adopted', 105],
  ['Pending', 176],
  ['Missing', 3],
  ['InterestedParties', 45],
  ['WaitingForPickup', 15],
]);

const metricGroups = {
  unAdopted: [
    "Pending",
    "InterestedParties",
  ],
  adopted: [
    "Adopted",
  ],
  unknown: [
    "Missing",
    "WaitingForPickup"
  ],
}

const result = Object.fromEntries(Object.entries(metricGroups).map(([key, values]) => {
  return [
    key,
    values.map(value => ([value, input.get(value)]))
  ]
}));

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