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

145
Visualizações
How to sort an array of objects by multiple date fields?

I have the following data structure:

var dates = [
  {
    id: '1',
    date1: '2022-03-21T18:59:36.641Z',
    date2: '2022-03-17T18:59:36.641Z',
  },
  {
    id: '2',
    date1: '2022-03-20T18:59:36.641Z',
    date2: '2022-03-17T18:59:36.641Z',
  },
  {
    id: '3',
    date2: '2022-03-17T18:59:36.641Z',
  },
  {
    id: '4',
    date2: '2022-03-15T18:59:36.641Z',
  }
];

var sorted = dates.sort(function(a,b) {
      return (a.date1 > b.date1) ? 1 : -1
   });

console.log({sorted});

Notice that date1 is not always available, but date2 is required. I'd like to sort by date1 first, then date2. I've created this fiddle to test, but still haven't figured it out: https://jsfiddle.net/y9sgpob8/4/

Please help me figure out how to get the results in the following order:

[{
  date1: "2022-03-20T18:59:36.641Z",
  date2: "2022-03-17T18:59:36.641Z",
  id: "2"
}, {
  date1: "2022-03-21T18:59:36.641Z",
  date2: "2022-03-17T18:59:36.641Z",
  id: "1"
}, {
  date2: "2022-03-15T18:59:36.641Z",
  id: "4"
}, {
  date2: "2022-03-17T18:59:36.641Z",
  id: "3"
}]
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

You need to sort based on

  • whether date1 exists
  • then based on date1 value
  • then based on date2 value

Since the dates are in ISO format, you can do string comparison to sort

const input=[{id:"1",date1:"2022-03-21T18:59:36.641Z",date2:"2022-03-17T18:59:36.641Z",},{id:"2",date1:"2022-03-20T18:59:36.641Z",date2:"2022-03-17T18:59:36.641Z",},{id:"3",date2:"2022-03-17T18:59:36.641Z",},{id:"4",date2:"2022-03-15T18:59:36.641Z",}];

input.sort((a,b) => 
  ( ('date1' in b) - ('date1' in a) )
  || (a.date1 ?? '').localeCompare(b.date1 ?? '')
  || a.date2.localeCompare(b.date2)
)

console.log(input)

about 4 years ago · Juan Pablo Isaza Relatório

0

You could also separate the objects that only have date2 then sort and lastly merge it. See snippet below:

const dates = [
  {
    id: '1',
    date1: '2022-03-21T18:59:36.641Z',
    date2: '2022-03-17T18:59:36.641Z',
  },
  {
    id: '2',
    date1: '2022-03-20T18:59:36.641Z',
    date2: '2022-03-17T18:59:36.641Z',
  },
  {
    id: '3',
    date2: '2022-03-17T18:59:36.641Z',
  },
  {
    id: '4',
    date2: '2022-03-15T18:59:36.641Z',
  }
];

var array1 = [];
var array2 = [];

for (const date in dates) {
  if (dates[date].date1) {
    array1.push(dates[date]);
  } else {
   array2.push(dates[date]);
  }
}

var sorted1 = array1.sort(function(a,b) {
      return (a.date1 > b.date1) ? 1 : -1
   }); 
   
var sorted2 = array2.sort(function(a,b) {
      return (a.date2 > b.date2) ? 1 : -1
   }); 
   
const sorted = sorted1.concat(sorted2);  
console.log({sorted});

about 4 years ago · Juan Pablo Isaza Relatório

0

All records not have date1 will be found in the end of the result, right? If so, You can separate to 2 arrays and merge them.

const dates=[{id:"1",date1:"2022-03-21T18:59:36.641Z",date2:"2022-03-17T18:59:36.641Z",},{id:"2",date1:"2022-03-20T18:59:36.641Z",date2:"2022-03-17T18:59:36.641Z",},{id:"3",date2:"2022-03-17T18:59:36.641Z",},{id:"4",date2:"2022-03-15T18:59:36.641Z",}];

const timeStamp = value => new Date(value).valueOf()

const arrWithDate1 = dates
                      .filter(elem => elem.date1)
                      .sort((a, b) => (timeStamp(a.date1) - timeStamp(b.date1)))

const arrWithDate2 = dates
                      .filter(elem => !elem.date1)
                      .sort((a, b) => (timeStamp(a.date2) - timeStamp(b.date2)))

console.log([...arrWithDate1, ...arrWithDate2]);

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