I want to sort the following array of timestamps using lodash so the latest time stamp is first [3].
Code:
let timestamps = [\"2017-
You could treat ISO 8601 date strings as normal strings, because they are sortable as string.
var array = ["2017-01-15T19:18:13.000Z", "2016-11-24T17:33:56.000Z", "2017-04-24T00:41:18.000Z", "2017-03-06T01:45:29.000Z", "2017-03-05T03:30:40.000Z"];
array.sort((a, b) => b > a || -(b < a));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
The simplest way is to use Array.prototype.sort instead of lodash.
Kudos to @mplungjan and @gurvinder372 for pointing out that new Date
is useless.
Keep in mind that Array.prototype.sort updates the array on the place.
const dates = [
"2017-01-15T19:18:13.000Z",
"2016-11-24T17:33:56.000Z",
"2017-04-24T00:41:18.000Z",
"2017-03-06T01:45:29.000Z",
"2017-03-05T03:30:40.000Z"
]
dates.sort((d1, d2) => d2 > d1 ? 1 : -1) // desc
console.log(dates)
dates.sort() // asc
console.log(dates)
Another method could be possible with this options
let timestamps = ["2017-01-15T19:18:13.000Z", "2016-11-24T17:33:56.000Z", "2017-04-24T00:41:18.000Z", "2017-03-06T01:45:29.000Z", "2017-03-05T03:30:40.000Z"]
const sorterFunc = item => (new Date() - new Date(item));
const sorted = _.sortBy(timestamps, [sorterFunc]);
those will sort the array without having to call a method .reverse()
at all.
var users = ["2017-01-15T19:18:13.000Z", "2016-11-24T17:33:56.000Z", "2017-04-
24T00:41:18.000Z", "2017-03-06T01:45:29.000Z", "2017-03-05T03:30:40.000Z"];
_.sortBy(users, String);
How to sort an array of timestamps using lodash
This code is already sorting timestamps correctly using lodash:
const sorted = _.sortBy(timestamps);
just in ascending order, simply reverse the result using:
const sorted = _.sortBy(timestamps).reverse();
The strings are sortable using built-in sorting - no need for lodash or a sort function
According to https://jsperf.com/array-sort-reverse-vs-string-comparison this is 1.2% slower than a string comparison - unimportant if few dates
Sort and reverse:
console.log(
["2017-01-15T19:18:13.000Z", "2016-11-24T17:33:56.000Z", "2017-04-24T00:41:18.000Z", "2017-03-06T01:45:29.000Z", "2017-03-05T03:30:40.000Z" ]
.sort()
.reverse()
)