UNPKG

foop

Version:

interfaces that describe their intentions.

61 lines (60 loc) 6.22 kB
// 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==