foop
Version:
interfaces that describe their intentions.
61 lines (60 loc) • 6.22 kB
JavaScript
// var _curryN = require('./internal/_curryN')
// var _dispatchable = require('./internal/_dispatchable')
// var _has = require('./internal/_has')
// var _reduce = require('./internal/_reduce')
// var _xreduceBy = 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
// *
// * var reduceToNamesBy = R.reduceBy((acc, student) => acc.concat(student.name), []);
// * var namesByGrade = reduceToNamesBy(function(student) {
// * var score = student.score;
// * return score < 65 ? 'F' :
// * score < 70 ? 'D' :
// * score < 80 ? 'C' :
// * score < 90 ? 'B' : 'A';
// * });
// * var students = [{name: 'Lucy', score: 92},
// * {name: 'Drew', score: 85},
// * // ...
// * {name: 'Bart', score: 62}];
// * namesByGrade(students);
// * // {
// * // 'A': ['Lucy'],
// * // 'B': ['Drew']
// * // // ...,
// * // 'F': ['Bart']
// * // }
// */
// module.exports = _curryN(4, [], _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] : valueAcc, elt)
// return acc
// }, {}, list)
// }))
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3JlZHVjZUJ5LmpzIiwic291cmNlcyI6WyJfcmVkdWNlQnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdmFyIF9jdXJyeU4gPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeU4nKVxuLy8gdmFyIF9kaXNwYXRjaGFibGUgPSByZXF1aXJlKCcuL2ludGVybmFsL19kaXNwYXRjaGFibGUnKVxuLy8gdmFyIF9oYXMgPSByZXF1aXJlKCcuL2ludGVybmFsL19oYXMnKVxuLy8gdmFyIF9yZWR1Y2UgPSByZXF1aXJlKCcuL2ludGVybmFsL19yZWR1Y2UnKVxuLy8gdmFyIF94cmVkdWNlQnkgPSByZXF1aXJlKCcuL2ludGVybmFsL194cmVkdWNlQnknKVxuLy9cbi8vXG4vLyAvKipcbi8vICAqIEdyb3VwcyB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZ1xuLy8gICogdGhlIFN0cmluZy1yZXR1cm5pbmcgZnVuY3Rpb24gYGtleUZuYCBvbiBlYWNoIGVsZW1lbnQgYW5kIHJlZHVjZXMgdGhlIGVsZW1lbnRzXG4vLyAgKiBvZiBlYWNoIGdyb3VwIHRvIGEgc2luZ2xlIHZhbHVlIHZpYSB0aGUgcmVkdWNlciBmdW5jdGlvbiBgdmFsdWVGbmAuXG4vLyAgKlxuLy8gICogVGhpcyBmdW5jdGlvbiBpcyBiYXNpY2FsbHkgYSBtb3JlIGdlbmVyYWwgW2Bncm91cEJ5YF0oI2dyb3VwQnkpIGZ1bmN0aW9uLlxuLy8gICpcbi8vICAqIEFjdHMgYXMgYSB0cmFuc2R1Y2VyIGlmIGEgdHJhbnNmb3JtZXIgaXMgZ2l2ZW4gaW4gbGlzdCBwb3NpdGlvbi5cbi8vICAqXG4vLyAgKiBAZnVuY1xuLy8gICogQG1lbWJlck9mIFJcbi8vICAqIEBzaW5jZSB2MC4yMC4wXG4vLyAgKiBAY2F0ZWdvcnkgTGlzdFxuLy8gICogQHNpZyAoKGEsIGIpIC0+IGEpIC0+IGEgLT4gKGIgLT4gU3RyaW5nKSAtPiBbYl0gLT4ge1N0cmluZzogYX1cbi8vICAqIEBwYXJhbSB7RnVuY3Rpb259IHZhbHVlRm4gVGhlIGZ1bmN0aW9uIHRoYXQgcmVkdWNlcyB0aGUgZWxlbWVudHMgb2YgZWFjaCBncm91cCB0byBhIHNpbmdsZVxuLy8gICogICAgICAgIHZhbHVlLiBSZWNlaXZlcyB0d28gdmFsdWVzLCBhY2N1bXVsYXRvciBmb3IgYSBwYXJ0aWN1bGFyIGdyb3VwIGFuZCB0aGUgY3VycmVudCBlbGVtZW50LlxuLy8gICogQHBhcmFtIHsqfSBhY2MgVGhlIChpbml0aWFsKSBhY2N1bXVsYXRvciB2YWx1ZSBmb3IgZWFjaCBncm91cC5cbi8vICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleUZuIFRoZSBmdW5jdGlvbiB0aGF0IG1hcHMgdGhlIGxpc3QncyBlbGVtZW50IGludG8gYSBrZXkuXG4vLyAgKiBAcGFyYW0ge0FycmF5fSBsaXN0IFRoZSBhcnJheSB0byBncm91cC5cbi8vICAqIEByZXR1cm4ge09iamVjdH0gQW4gb2JqZWN0IHdpdGggdGhlIG91dHB1dCBvZiBga2V5Rm5gIGZvciBrZXlzLCBtYXBwZWQgdG8gdGhlIG91dHB1dCBvZlxuLy8gICogICAgICAgICBgdmFsdWVGbmAgZm9yIGVsZW1lbnRzIHdoaWNoIHByb2R1Y2VkIHRoYXQga2V5IHdoZW4gcGFzc2VkIHRvIGBrZXlGbmAuXG4vLyAgKiBAc2VlIFIuZ3JvdXBCeSwgUi5yZWR1Y2Vcbi8vICAqIEBleGFtcGxlXG4vLyAgKlxuLy8gICogICAgICB2YXIgcmVkdWNlVG9OYW1lc0J5ID0gUi5yZWR1Y2VCeSgoYWNjLCBzdHVkZW50KSA9PiBhY2MuY29uY2F0KHN0dWRlbnQubmFtZSksIFtdKTtcbi8vICAqICAgICAgdmFyIG5hbWVzQnlHcmFkZSA9IHJlZHVjZVRvTmFtZXNCeShmdW5jdGlvbihzdHVkZW50KSB7XG4vLyAgKiAgICAgICAgdmFyIHNjb3JlID0gc3R1ZGVudC5zY29yZTtcbi8vICAqICAgICAgICByZXR1cm4gc2NvcmUgPCA2NSA/ICdGJyA6XG4vLyAgKiAgICAgICAgICAgICAgIHNjb3JlIDwgNzAgPyAnRCcgOlxuLy8gICogICAgICAgICAgICAgICBzY29yZSA8IDgwID8gJ0MnIDpcbi8vICAqICAgICAgICAgICAgICAgc2NvcmUgPCA5MCA/ICdCJyA6ICdBJztcbi8vICAqICAgICAgfSk7XG4vLyAgKiAgICAgIHZhciBzdHVkZW50cyA9IFt7bmFtZTogJ0x1Y3knLCBzY29yZTogOTJ9LFxuLy8gICogICAgICAgICAgICAgICAgICAgICAge25hbWU6ICdEcmV3Jywgc2NvcmU6IDg1fSxcbi8vICAqICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLlxuLy8gICogICAgICAgICAgICAgICAgICAgICAge25hbWU6ICdCYXJ0Jywgc2NvcmU6IDYyfV07XG4vLyAgKiAgICAgIG5hbWVzQnlHcmFkZShzdHVkZW50cyk7XG4vLyAgKiAgICAgIC8vIHtcbi8vICAqICAgICAgLy8gICAnQSc6IFsnTHVjeSddLFxuLy8gICogICAgICAvLyAgICdCJzogWydEcmV3J11cbi8vICAqICAgICAgLy8gICAvLyAuLi4sXG4vLyAgKiAgICAgIC8vICAgJ0YnOiBbJ0JhcnQnXVxuLy8gICogICAgICAvLyB9XG4vLyAgKi9cbi8vIG1vZHVsZS5leHBvcnRzID0gX2N1cnJ5Tig0LCBbXSwgX2Rpc3BhdGNoYWJsZShbXSwgX3hyZWR1Y2VCeSxcbi8vICAgZnVuY3Rpb24gcmVkdWNlQnkodmFsdWVGbiwgdmFsdWVBY2MsIGtleUZuLCBsaXN0KSB7XG4vLyAgICAgcmV0dXJuIF9yZWR1Y2UoZnVuY3Rpb24oYWNjLCBlbHQpIHtcbi8vICAgICAgIHZhciBrZXkgPSBrZXlGbihlbHQpXG4vLyAgICAgICBhY2Nba2V5XSA9IHZhbHVlRm4oX2hhcyhrZXksIGFjYykgPyBhY2Nba2V5XSA6IHZhbHVlQWNjLCBlbHQpXG4vLyAgICAgICByZXR1cm4gYWNjXG4vLyAgICAgfSwge30sIGxpc3QpXG4vLyAgIH0pKVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==