1

I have contacts that have SMS messages associated with them. Each sms record has properties such as time. Time is an timestamp string formatted as this example

2022-04-29T16:10:43-06:00

I am trying to sort this array of sms messages so that the latest one is the last one and the earliest one is the first one in the array. I thought I had it nailed down but apparently I don't. Its still not perfectly sorting at all.

this.getRecent()
    .then(contacts => {
        const sorted = contacts.map(contact => {
            contact.sms = contact.sms.sort((a,b) => (a.time.localeCompare(b.time));
            return contact;
        });
        // rest of code here
    })
    .catch(err => this.handleError(err));
2
  • What do you mean by not sorting? What is the data you have, what sorting do you expect, and what is the actual sort order? Commented May 10, 2022 at 18:22
  • Possible duplicate: How to sort an object array by date property? Commented May 10, 2022 at 19:20

2 Answers 2

2

Based on your question, I'm making the assumption that the contact.sms object contains an array of objects where time is a string (localeCompare is called). Since dates can have operators applied to them, you can sort them like any number.

const dates = [
  new Date("2022-04-29T16:10:43-06:00"),
  new Date("2023-04-29T16:10:43-06:00"),
  new Date("2022-01-29T16:10:43-06:00")
]

console.log(dates)

dates.sort((a, b) => a - b)

console.log(dates)

In your case,

// Sorts dates where the least recent is first.
contact.sms = contact.sms.sort((a,b) => new Date(a.time) - new Date(b.time));
Sign up to request clarification or add additional context in comments.

Comments

0

You can parse them to a Date and compare the milliseconds:

contact.sms.sort((a,b) => new Date(a.time) - new Date(b.time));

Or swap a and b if you want to reverse the order.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.