user11232976
user11232976

Reputation:

How to sort array of objects based on descending order of date in reactjs?

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?

Upvotes: 3

Views: 8863

Answers (3)

Shidersz
Shidersz

Reputation: 17190

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));

Upvotes: 4

Krzysztof Krzeszewski
Krzysztof Krzeszewski

Reputation: 6714

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)));

Upvotes: 0

mbojko
mbojko

Reputation: 14679

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.)

Upvotes: 1

Related Questions