import curry2 from "../function/curry2"; /** * Groups the elements of a list into an object * where the group of each element is determined by the grouping/key function. * The resulting object has the following format: * <pre> * { * "group1": [el, el2, el3], // elements for which `groupFn` returned `group1` * "group2": [el4, el5], // elements for which `groupFn` returned `group2` * // ... * } * </pre> * * @param {function} groupFn * @param {any[]} list * @returns {object} */ const groupBy = (groupFn, list) => { const result = {}; for (let index = 0; index < list.length; index++) { const element = list[index]; const key = groupFn(element, index); if (!result.hasOwnProperty(key)) { result[key] = []; } result[key].push(element); } return result; }; export default curry2(groupBy);