| var _checkForMethod = /*#__PURE__*/require('./internal/_checkForMethod'); |
| |
| var _curry2 = /*#__PURE__*/require('./internal/_curry2'); |
| |
| var reduceBy = /*#__PURE__*/require('./reduceBy'); |
| |
| /** |
| * Splits a list into sub-lists stored in an object, based on the result of |
| * calling a String-returning function on each element, and grouping the |
| * results according to values returned. |
| * |
| * Dispatches to the `groupBy` method of the second argument, if present. |
| * |
| * Acts as a transducer if a transformer is given in list position. |
| * |
| * @func |
| * @memberOf R |
| * @since v0.1.0 |
| * @category List |
| * @sig (a -> String) -> [a] -> {String: [a]} |
| * @param {Function} fn Function :: a -> String |
| * @param {Array} list The array to group |
| * @return {Object} An object with the output of `fn` for keys, mapped to arrays of elements |
| * that produced that key when passed to `fn`. |
| * @see R.reduceBy, R.transduce |
| * @example |
| * |
| * const byGrade = R.groupBy(function(student) { |
| * const score = student.score; |
| * return score < 65 ? 'F' : |
| * score < 70 ? 'D' : |
| * score < 80 ? 'C' : |
| * score < 90 ? 'B' : 'A'; |
| * }); |
| * const students = [{name: 'Abby', score: 84}, |
| * {name: 'Eddy', score: 58}, |
| * // ... |
| * {name: 'Jack', score: 69}]; |
| * byGrade(students); |
| * // { |
| * // 'A': [{name: 'Dianne', score: 99}], |
| * // 'B': [{name: 'Abby', score: 84}] |
| * // // ..., |
| * // 'F': [{name: 'Eddy', score: 58}] |
| * // } |
| */ |
| |
| |
| var groupBy = /*#__PURE__*/_curry2( /*#__PURE__*/_checkForMethod('groupBy', /*#__PURE__*/reduceBy(function (acc, item) { |
| if (acc == null) { |
| acc = []; |
| } |
| acc.push(item); |
| return acc; |
| }, null))); |
| module.exports = groupBy; |