UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

33 lines 2.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.groupBy = void 0; /** * Groups a list by a given key * @param data The data to be grouped * @param getKey Either a key string of data objects to group on, or a function to retrieve the data to group on. * * E.G. for `data=[{t: 3, k:"y"}, {t: 1, k:"y"}]`, `geyKey="k"` or `getKey=v=>v.k`. * @param equals Comparison function to determine whether to given values to group on are equivalent * @returns The grouped data */ function groupBy(data, getKey, equals = (a, b) => a == b) { const result = []; const getter = getKey instanceof Function ? getKey : (item) => item[getKey]; data.forEach(item => { // Get the key, and find a group with this same key const newKey = getter(item); const group = result.find(({ key }) => equals(newKey, key)); if (group) { // If such a group is found, at the item group.values.push(item); } else { // Otherwise, create a group with this item const newGroup = { key: newKey, values: [item] }; result.push(newGroup); } }); return result; } exports.groupBy = groupBy; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBCeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ncm91cEJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsT0FBTyxDQUNuQixJQUFTLEVBQ1QsTUFBNEIsRUFDNUIsU0FBa0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUVsRCxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUNSLE1BQU0sWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFPLEVBQUUsRUFBRSxDQUFFLElBQUksQ0FBQyxNQUFNLENBQWtCLENBQUM7SUFFdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNoQixtREFBbUQ7UUFDbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLEVBQUU7WUFDUCx3Q0FBd0M7WUFDeEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0I7YUFBTTtZQUNILDJDQUEyQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBeEJELDBCQXdCQyJ9