foop
Version:
interfaces that describe their intentions.
52 lines (50 loc) • 3.77 kB
JavaScript
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==