lib/sortBy.js
function sortBy (coll, iteratee, callback) {
    var _iteratee = wrapAsync(iteratee);
    return map(coll, (x, iterCb) => {
        _iteratee(x, (err, criteria) => {
            if (err) return iterCb(err);
            iterCb(err, {value: x, criteria});
        });
    }, (err, results) => {
        if (err) return callback(err);
        callback(null, results.sort(comparator).map(v => v.value));
    });

    function comparator(left, right) {
        var a = left.criteria, b = right.criteria;
        return a < b ? -1 : a > b ? 1 : 0;
    }
}
function sortBy (coll, iteratee, callback) {
    var _iteratee = wrapAsync(iteratee);
    return map(coll, (x, iterCb) => {
        _iteratee(x, (err, criteria) => {
            if (err) return iterCb(err);
            iterCb(err, {value: x, criteria});
        });
    }, (err, results) => {
        if (err) return callback(err);
        callback(null, results.sort(comparator).map(v => v.value));
    });

    function comparator(left, right) {
        var a = left.criteria, b = right.criteria;
        return a < b ? -1 : a > b ? 1 : 0;
    }
}
function sortBy ( coll , iteratee , callback ) { var _iteratee = wrapAsync ( iteratee ) ; return map ( coll , ( x , iterCb ) => { _iteratee ( x , ( err , criteria ) => { if ( err ) return iterCb ( err ) ; iterCb ( err , { value : x , criteria } ) ; } ) ; } , ( err , results ) => { if ( err ) return callback ( err ) ; callback ( null , results . sort ( comparator ) . map ( v => v . value ) ) ; } ) ; function comparator ( left , right ) { var a = left . criteria , b = right . criteria ; return a < b ? - 1 : a > b ? 1 : 0 ; } }
Sorts a list by the results of running each `coll` value through an async
`iteratee`.

@name sortBy
@static
@memberOf module:Collections
@method
@category Collection
@param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.
@param {AsyncFunction} iteratee - An async function to apply to each item in
`coll`.
The iteratee should complete with a value to use as the sort criteria as
its `result`.
Invoked with (item, callback).
@param {Function} callback - A callback which is called after all the
`iteratee` functions have finished, or an error occurs. Results is the items
from the original `coll` sorted by the values returned by the `iteratee`
calls. Invoked with (err, results).
@returns {Promise} a promise, if no callback passed
@example

async.sortBy(['file1','file2','file3'], function(file, callback) {
fs.stat(file, function(err, stats) {
callback(err, stats.mtime);
});
}, function(err, results) {
// results is now the original array of files sorted by
// modified date
});

// By modifying the callback parameter the
// sorting order can be influenced:

// ascending order
async.sortBy([1,9,3,5], function(x, callback) {
callback(null, x);
}, function(err,result) {
// result callback
});

// descending order
async.sortBy([1,9,3,5], function(x, callback) {
callback(null, x*-1);    //<- x*-1 instead of x, turns the order around
}, function(err,result) {
// result callback
});
Sorts a list by the results of running each coll value through an async iteratee .