| var _clone = |
| /*#__PURE__*/ |
| require("./internal/_clone"); |
| |
| var _curryN = |
| /*#__PURE__*/ |
| require("./internal/_curryN"); |
| |
| var _dispatchable = |
| /*#__PURE__*/ |
| require("./internal/_dispatchable"); |
| |
| var _has = |
| /*#__PURE__*/ |
| require("./internal/_has"); |
| |
| var _reduce = |
| /*#__PURE__*/ |
| require("./internal/_reduce"); |
| |
| var _xreduceBy = |
| /*#__PURE__*/ |
| require("./internal/_xreduceBy"); |
| /** |
| * Groups the elements of the list according to the result of calling |
| * the String-returning function `keyFn` on each element and reduces the elements |
| * of each group to a single value via the reducer function `valueFn`. |
| * |
| * This function is basically a more general [`groupBy`](#groupBy) function. |
| * |
| * Acts as a transducer if a transformer is given in list position. |
| * |
| * @func |
| * @memberOf R |
| * @since v0.20.0 |
| * @category List |
| * @sig ((a, b) -> a) -> a -> (b -> String) -> [b] -> {String: a} |
| * @param {Function} valueFn The function that reduces the elements of each group to a single |
| * value. Receives two values, accumulator for a particular group and the current element. |
| * @param {*} acc The (initial) accumulator value for each group. |
| * @param {Function} keyFn The function that maps the list's element into a key. |
| * @param {Array} list The array to group. |
| * @return {Object} An object with the output of `keyFn` for keys, mapped to the output of |
| * `valueFn` for elements which produced that key when passed to `keyFn`. |
| * @see R.groupBy, R.reduce |
| * @example |
| * |
| * const groupNames = (acc, {name}) => acc.concat(name) |
| * const toGrade = ({score}) => |
| * score < 65 ? 'F' : |
| * score < 70 ? 'D' : |
| * score < 80 ? 'C' : |
| * score < 90 ? 'B' : 'A' |
| * |
| * var students = [ |
| * {name: 'Abby', score: 83}, |
| * {name: 'Bart', score: 62}, |
| * {name: 'Curt', score: 88}, |
| * {name: 'Dora', score: 92}, |
| * ] |
| * |
| * reduceBy(groupNames, [], toGrade, students) |
| * //=> {"A": ["Dora"], "B": ["Abby", "Curt"], "F": ["Bart"]} |
| */ |
| |
| |
| var reduceBy = |
| /*#__PURE__*/ |
| _curryN(4, [], |
| /*#__PURE__*/ |
| _dispatchable([], _xreduceBy, function reduceBy(valueFn, valueAcc, keyFn, list) { |
| return _reduce(function (acc, elt) { |
| var key = keyFn(elt); |
| acc[key] = valueFn(_has(key, acc) ? acc[key] : _clone(valueAcc, [], [], false), elt); |
| return acc; |
| }, {}, list); |
| })); |
| |
| module.exports = reduceBy; |