Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

183
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!