UNPKG

foop

Version:

interfaces that describe their intentions.

52 lines (50 loc) 3.77 kB
var curry = require('../../fp/curry') var slice = require('../../native/arraySlice') /** * Sorts a list according to a list of comparators. * * @since 5.0.0-beta.5 * @memberOf sort * * @param {Array} functions A list of comparator functions. * @param {Array} list The list to sort. * @return {Array} A new list sorted according to the comarator functions. * * @func * @fork v0.23.0 * @category Relation * @sig [a -> a -> Number] -> [a] -> [a] * * @example * * var alice = { * name: 'alice', * age: 40 * }; * var bob = { * name: 'bob', * age: 30 * }; * var clara = { * name: 'clara', * age: 40 * }; * var people = [clara, bob, alice]; * var ageNameSort = R.sortWith([ * R.descend(R.prop('age')), * R.ascend(R.prop('name')) * ]); * ageNameSort(people); //=> [alice, clara, bob] */ module.exports = curry(2, function sortWith(fns, list) { return slice.call(list, 0).sort(function(a, b) { var result = 0 var i = 0 while (result === 0 && i < fns.length) { result = fns[i](a, b) i += 1 } return result }) }) //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydFdpdGguanMiLCJzb3VyY2VzIjpbInNvcnRXaXRoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGN1cnJ5ID0gcmVxdWlyZSgnLi4vLi4vZnAvY3VycnknKVxuY29uc3Qgc2xpY2UgPSByZXF1aXJlKCcuLi8uLi9uYXRpdmUvYXJyYXlTbGljZScpXG5cbi8qKlxuICogU29ydHMgYSBsaXN0IGFjY29yZGluZyB0byBhIGxpc3Qgb2YgY29tcGFyYXRvcnMuXG4gKlxuICogQHNpbmNlIDUuMC4wLWJldGEuNVxuICogQG1lbWJlck9mIHNvcnRcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBmdW5jdGlvbnMgQSBsaXN0IG9mIGNvbXBhcmF0b3IgZnVuY3Rpb25zLlxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBUaGUgbGlzdCB0byBzb3J0LlxuICogQHJldHVybiB7QXJyYXl9IEEgbmV3IGxpc3Qgc29ydGVkIGFjY29yZGluZyB0byB0aGUgY29tYXJhdG9yIGZ1bmN0aW9ucy5cbiAqXG4gKiBAZnVuY1xuICogQGZvcmsgdjAuMjMuMFxuICogQGNhdGVnb3J5IFJlbGF0aW9uXG4gKiBAc2lnIFthIC0+IGEgLT4gTnVtYmVyXSAtPiBbYV0gLT4gW2FdXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBhbGljZSA9IHtcbiAqICAgICAgICBuYW1lOiAnYWxpY2UnLFxuICogICAgICAgIGFnZTogNDBcbiAqICAgICAgfTtcbiAqICAgICAgdmFyIGJvYiA9IHtcbiAqICAgICAgICBuYW1lOiAnYm9iJyxcbiAqICAgICAgICBhZ2U6IDMwXG4gKiAgICAgIH07XG4gKiAgICAgIHZhciBjbGFyYSA9IHtcbiAqICAgICAgICBuYW1lOiAnY2xhcmEnLFxuICogICAgICAgIGFnZTogNDBcbiAqICAgICAgfTtcbiAqICAgICAgdmFyIHBlb3BsZSA9IFtjbGFyYSwgYm9iLCBhbGljZV07XG4gKiAgICAgIHZhciBhZ2VOYW1lU29ydCA9IFIuc29ydFdpdGgoW1xuICogICAgICAgIFIuZGVzY2VuZChSLnByb3AoJ2FnZScpKSxcbiAqICAgICAgICBSLmFzY2VuZChSLnByb3AoJ25hbWUnKSlcbiAqICAgICAgXSk7XG4gKiAgICAgIGFnZU5hbWVTb3J0KHBlb3BsZSk7IC8vPT4gW2FsaWNlLCBjbGFyYSwgYm9iXVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGN1cnJ5KDIsIGZ1bmN0aW9uIHNvcnRXaXRoKGZucywgbGlzdCkge1xuICByZXR1cm4gc2xpY2UuY2FsbChsaXN0LCAwKS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgcmVzdWx0ID0gMFxuICAgIHZhciBpID0gMFxuICAgIHdoaWxlIChyZXN1bHQgPT09IDAgJiYgaSA8IGZucy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IGZuc1tpXShhLCBiKVxuICAgICAgaSArPSAxXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfSlcbn0pXG4iXSwibmFtZXMiOlsiY29uc3QiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUN2Q0EsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0NoRCxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtFQUNyRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0MsSUFBSSxNQUFNLEdBQUcsQ0FBQztJQUNkLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDVCxPQUFPLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUU7TUFDckMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ3JCLENBQUMsSUFBSSxDQUFDO0tBQ1A7SUFDRCxPQUFPLE1BQU07R0FDZCxDQUFDO0NBQ0gsQ0FBQzsifQ==