UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

31 lines (30 loc) 1.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.groupBy = groupBy; function groupBy(values, selector) { // discuss at: https://locutus.io/kotlin/collections/groupBy/ // original by: Kevin van Zonneveld (https://kvz.io) // note 1: Groups elements using selector(value), similar to Kotlin's groupBy. // example 1: groupBy([1, 2, 3, 4], (n) => (n % 2 === 0 ? 'even' : 'odd')) // returns 1: {odd: [1, 3], even: [2, 4]} // example 2: groupBy(['ant', 'bear', 'cat'], (s) => s.length) // returns 2: {'3': ['ant', 'cat'], '4': ['bear']} // example 3: groupBy([], () => 'x') // returns 3: {} if (!Array.isArray(values) || typeof selector !== 'function') { return {}; } const out = {}; for (let i = 0; i < values.length; i++) { const value = values[i]; const key = String(selector(value, i, values)); const bucket = out[key]; if (bucket) { bucket.push(value); } else { out[key] = [value]; } } return out; }