@launchmenu/core
Version:
An environment for visual keyboard controlled applets
33 lines • 2.51 kB
JavaScript
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
;