Reputation:
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
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
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
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