I'm trying to sort an array of objects by descending and beginning with number first, here's what I'm having:
var users = [
{ 'user': 'fred', 'a': 48 },
{ 'user': 'barney', 'a': 'b' },
{ 'user': 'fred', 'a': 40 },
{ 'user': 'barney', 'a': 'c' }
];
_.orderBy(users, 'a', 'desc');
result:
0: Object {a: "b", user: "barney"}
1: Object {a: "c", user: "barney"}
2: Object {a: 48, user: "fred"}
3: Object {a: 40, user: "fred"}
expected result:
0: Object {a: 48, user: "fred"}
1: Object {a: 40, user: "fred"}
2: Object {a: "b", user: "barney"}
3: Object {a: "c", user: "barney"}
You can provide multiple sort keys ("iteratees") and the order for each key
_.orderBy(users, [x => isNaN(x.a), 'a'], ['asc', 'desc']);
This will, however, sort the strings descending as well (that is, the result will be 48, 40, c, b
.
var users = [
{ 'user': 'x', 'a': 'a' },
{ 'user': 'x', 'a': 948 },
{ 'user': 'x', 'a': 48 },
{ 'user': 'x', 'a': -480 },
{ 'user': 'x', 'a': 'c' },
{ 'user': 'x', 'a': 548 },
{ 'user': 'x', 'a': 4558 },
{ 'user': 'x', 'a': 148 },
{ 'user': 'x', 'a': 4834534 },
{ 'user': 'x', 'a': 1 },
{ 'user': 'x', 'a': 'b' },
];
users = _.orderBy(users, [x => isNaN(x.a), 'a'], ['asc', 'desc']);
console.log(users)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>