sort-by-prop.js

import { curryN, sortBy, prop } from 'ramda'

/**
 * Sorts the list by the supplied property.
 *
 * @func sortByProp
 * @memberOf PHI
 * @since {@link https://phi.meltwaterlabs.com/1.1.0|v1.1.0}
 * @category List
 * @sig Idx -> [a] -> [a]
 * @param {!(string|number)} prop The property to sort by
 * @param {!Array} arr The list to sort
 * @return {!Array} The sorted list
 * @see PHI.sortByPath
 * @example
 *
 * const sortByFirstItem = PHI.sortByProp(0)
 * const pairs = [[-1, 1], [-2, 2], [-3, 3]]
 * sortByFirstItem(pairs) //=> [[-3, 3], [-2, 2], [-1, 1]]
 *
 * const sortByName = PHI.sortByProp('name')
 * const people = [{name: 'joe'}, {name: 'alice'}]
 * sortByName(people) //=> [{name: 'alice'}, {name: 'joe'}]
 */
const sortByProp = curryN(2, (p, arr) => sortBy(prop(p))(arr))

export default sortByProp