UNPKG

foop

Version:

interfaces that describe their intentions.

48 lines (46 loc) 1.24 kB
const curry = require('../../fp/curry') const slice = require('../../native/arraySlice') /** * Sorts the list according to the supplied function. * @since 5.0.0-beta.1 * @memberOf sort * * @param {Function} fn * @param {Array} list The list to sort. * @return {Array} A new list sorted by the keys generated by `fn`. * * @func * @fork v0.1.0 * @category Relation * @sig Ord b => (a -> b) -> [a] -> [a] * * @example * * var sortByFirstItem = R.sortBy(R.prop(0)); * var sortByNameCaseInsensitive = R.sortBy(R.compose(R.toLower, R.prop('name'))); * var pairs = [[-1, 1], [-2, 2], [-3, 3]]; * sortByFirstItem(pairs); //=> [[-3, 3], [-2, 2], [-1, 1]] * var alice = { * name: 'ALICE', * age: 101 * }; * var bob = { * name: 'Bob', * age: -10 * }; * var clara = { * name: 'clara', * age: 314.159 * }; * var people = [clara, bob, alice]; * sortByNameCaseInsensitive(people); * //=> [alice, bob, clara] * */ module.exports = curry(2, function sortBy(fn, list) { return slice.call(list, 0).sort(function(a, b) { var aa = fn(a) var bb = fn(b) return aa < bb ? -1 : aa > bb ? 1 : 0 }) })