Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

185
Vistas
How can I sort and reduce the object base on this sample data from javascript array?

The date and time are integers, I would like to sort and reduce them base on up to date format like date should be up to date and military time should be up to date too. All values are distinct base on there object id

let arr = [
            {"id": 1, "date": 20220518, "time": 1700},
            {"id": 1, "date": 20220518, "time": 1500},
            {"id": 1, "date": 20220518, "time": 2200},
            {"id": 1, "date": 20220517, "time": 2300},
            {"id": 2, "date": 20220518, "time": 1500},
            {"id": 2, "date": 20220516, "time": 2100},
            {"id": 3, "date": 20220518, "time": 1400},
            {"id": 3, "date": 20220517, "time": 1900},
            {"id": 3, "date": 20220518, "time": 1900},
            {"id": 4, "date": 20220517, "time": 1900},
            {"id": 4, "date": 20220516, "time": 1300},
            {"id": 5, "date": 20220516, "time": 1600}
        ]
    
    
    
 // Result should be like this
 let arr = [
            {"id": 1, "date": 20220518, "time": 2200},
            {"id": 2, "date": 20220518, "time": 1500},
            {"id": 3, "date": 20220518, "time": 1900},
            {"id": 4, "date": 20220517, "time": 1900},
            {"id": 5, "date": 20220516, "time": 1600}
        ]

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Use Array.prototype.filter()

let arr = [
  { id: 1, date: 20220518, time: 1700 },
  { id: 1, date: 20220518, time: 1500 },
  { id: 1, date: 20220518, time: 2200 },
  { id: 1, date: 20220517, time: 2300 },
  { id: 2, date: 20220518, time: 1500 },
  { id: 2, date: 20220516, time: 2100 },
  { id: 3, date: 20220518, time: 1400 },
  { id: 3, date: 20220517, time: 1900 },
  { id: 3, date: 20220518, time: 1900 },
  { id: 4, date: 20220517, time: 1900 },
  { id: 4, date: 20220516, time: 1300 },
  { id: 5, date: 20220516, time: 1600 },
];
const result = arr.filter(
  (item) =>
    !arr.some(
      (i) =>
        i.id === item.id &&
        // assume the time is a 4 digits number
        i.date * 10000 + i.time > item.date * 10000 + item.time
    )
);

console.log(result);

Use Array.prototype.reduce()

let arr = [
      { id: 1, date: 20220518, time: 1700 },
      { id: 1, date: 20220518, time: 1500 },
      { id: 1, date: 20220518, time: 2200 },
      { id: 1, date: 20220517, time: 2300 },
      { id: 2, date: 20220518, time: 1500 },
      { id: 2, date: 20220516, time: 2100 },
      { id: 3, date: 20220518, time: 1400 },
      { id: 3, date: 20220517, time: 1900 },
      { id: 3, date: 20220518, time: 1900 },
      { id: 4, date: 20220517, time: 1900 },
      { id: 4, date: 20220516, time: 1300 },
      { id: 5, date: 20220516, time: 1600 },
    ];
const result = arr.reduce((previousArray, currentItem) => {
  const item = previousArray.find((i) => i.id === currentItem.id);
  if (item) {
    if (currentItem.date > item.date) {
      item.date = currentItem.date;
      item.time = currentItem.time;
    } else if (currentItem.date === item.date && currentItem.time > item.time) {
      item.time = currentItem.time;
    }
  } else {
    previousArray.push(currentItem);
  }
  return previousArray;
}, []);

console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

There are so many ways I don't know about your data and what you have done so far. Simple logic is below you can filter the data as below or you can use jquery.

If you want to sort the array then sort it before re-creating.

//Raw data
let arr = [{
    "id": 1,
    "date": 20220518,
    "time": 1700
  },
  {
    "id": 1,
    "date": 20220518,
    "time": 1500
  },
  {
    "id": 1,
    "date": 20220518,
    "time": 2200
  },
  {
    "id": 1,
    "date": 20220517,
    "time": 2300
  },
  {
    "id": 2,
    "date": 20220518,
    "time": 1500
  },
  {
    "id": 2,
    "date": 20220516,
    "time": 2100
  },
  {
    "id": 3,
    "date": 20220518,
    "time": 1400
  },
  {
    "id": 3,
    "date": 20220517,
    "time": 1900
  },
  {
    "id": 3,
    "date": 20220518,
    "time": 1900
  },
  {
    "id": 4,
    "date": 20220517,
    "time": 1900
  },
  {
    "id": 4,
    "date": 20220516,
    "time": 1300
  },
  {
    "id": 5,
    "date": 20220516,
    "time": 1600
  }
];

// Sort before creating the data
arr.sort(function(a, b) {
  if (a.date >= b.date) {
    return 1;
  } else {
    return -1;
  }
  if (a.time >= b.time) {
    return 1;
  } else {
    return -1;
  }
});


//Create the new array with required data
let data = [];
arr.forEach(function(e, i) {
  data[e.id] = e;
});
console.log(data.filter(n => n));

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda