Search code examples
javascriptsortinglodash

lodash multi-column sortBy


There's a nifty method to sort an array of objects based on several properties:

var data = _.sortBy(array_of_objects, ['type', 'name']);

However that is only for ascending sorting. Is there some handy way of defining direction per column? E.g.

var data = _.sortBy(array_of_objects, [{'type': 'asc'}, {'name': 'desc'}]);

Solution

  • As of lodash 3.5.0 you can use sortByOrder (renamed orderBy in v4.3.0):

    var data = _.sortByOrder(array_of_objects, ['type','name'], [true, false]);
    

    Since version 3.10.0 you can even use standard semantics for ordering (asc, desc):

    var data = _.sortByOrder(array_of_objects, ['type','name'], ['asc', 'desc']);
    

    In version 4 of lodash this method has been renamed orderBy:

    var data = _.orderBy(array_of_objects, ['type','name'], ['asc', 'desc']);