3

I have an array of objects as below and want to sort it in descending order.

Below is the array of objects

[
{
    "attributes": {

    },
    "timestamp": "2019-04-03T21:00:00+00:00",
},
{
    "attributes": {
    },
    "timestamp": "2019-04-03T09:24:27.179190+00:00",
},
{
    "attributes": {
    },
    "timestamp": "2019-04-03T08:54:06.721557+00:00",
},
{
    "attributes": {

    },
    "timestamp": "2019-04-03T04:54:56.227415+00:00",
},
]

What I have tried?

 let sorted_array = this.state.array.sort((a, b) => a.timestamp - 
     b.timestamp);
 this.setState({array: sorted_array});

But this doesnt work. Could you someone help me with this?

3 Answers 3

4

Since the timestamps are normalized for lexicographical sort, maybe you can use String.localeCompare() on the sort method:

let input = [
  {
    "attributes": {},
    "timestamp": "2019-04-03T21:00:00+00:00",
  },
  {
    "attributes": {},
    "timestamp": "2019-04-03T09:24:27.179190+00:00",
  },
  {
    "attributes": {},
    "timestamp": "2019-04-03T08:54:06.721557+00:00",
  },
  {
    "attributes": {},
    "timestamp": "2019-04-03T04:54:56.227415+00:00",
  }
];

input.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
console.log(input);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

If you need to sort in ascending order, then use:

input.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
Sign up to request clarification or add additional context in comments.

Comments

1

Replace

(a, b) => a.timestamp - b.timestamp

with

(a, b) => a.timestamp.valueOf() - b.timestamp.valueOf()

(That's if the timestamp is indeed a Date object.)

Comments

0

You could create date object of each time stamp and compare those

const data = [
  {
    "attributes": {},
    "timestamp": "2019-04-03T21:00:00+00:00",
  },
  {
    "attributes": {},
    "timestamp": "2019-04-03T09:24:27.179190+00:00",
  },
  {
    "attributes": {},
    "timestamp": "2019-04-03T08:54:06.721557+00:00",
  },
  {
    "attributes": {},
    "timestamp": "2019-04-03T04:54:56.227415+00:00",
  },
]

console.log(data.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp)));

Comments

Your Answer

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