@tonaljs/collection
Version:
Utility functions to work with collections (arrays)
1 lines • 4.19 kB
Source Map (JSON)
{"version":3,"sources":["../index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n// ascending range\nfunction ascR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = n + b);\n return a;\n}\n// descending range\nfunction descR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = b - n);\n return a;\n}\n\n/**\n * Creates a numeric range\n *\n * @param {number} from\n * @param {number} to\n * @return {Array<number>}\n *\n * @example\n * range(-2, 2) // => [-2, -1, 0, 1, 2]\n * range(2, -2) // => [2, 1, 0, -1, -2]\n */\nexport function range(from: number, to: number): number[] {\n return from < to ? ascR(from, to - from + 1) : descR(from, from - to + 1);\n}\n\n/**\n * Rotates a list a number of times. It\"s completly agnostic about the\n * contents of the list.\n *\n * @param {Integer} times - the number of rotations\n * @param {Array} collection\n * @return {Array} the rotated collection\n *\n * @example\n * rotate(1, [1, 2, 3]) // => [2, 3, 1]\n */\nexport function rotate<T>(times: number, arr: T[]): T[] {\n const len = arr.length;\n const n = ((times % len) + len) % len;\n return arr.slice(n, len).concat(arr.slice(0, n));\n}\n\n/**\n * Return a copy of the collection with the null values removed\n * @function\n * @param {Array} collection\n * @return {Array}\n *\n * @example\n * compact([\"a\", \"b\", null, \"c\"]) // => [\"a\", \"b\", \"c\"]\n */\nexport function compact(arr: any[]): any[] {\n return arr.filter((n) => n === 0 || n);\n}\n\n/**\n * Randomizes the order of the specified collection in-place, using the Fisher–Yates shuffle.\n *\n * @function\n * @param {Array} collection\n * @return {Array} the collection shuffled\n *\n * @example\n * shuffle([\"C\", \"D\", \"E\", \"F\"]) // => [...]\n */\nexport function shuffle(arr: any[], rnd = Math.random): any[] {\n let i: number;\n let t: any;\n let m: number = arr.length;\n while (m) {\n i = Math.floor(rnd() * m--);\n t = arr[m];\n arr[m] = arr[i];\n arr[i] = t;\n }\n return arr;\n}\n\n/**\n * Get all permutations of an collection\n *\n * @param {Array} collection - the collection\n * @return {Array<Array>} an collection with all the permutations\n * @example\n * permutations([\"a\", \"b\", \"c\"])) // =>\n * [\n * [\"a\", \"b\", \"c\"],\n * [\"b\", \"a\", \"c\"],\n * [\"b\", \"c\", \"a\"],\n * [\"a\", \"c\", \"b\"],\n * [\"c\", \"a\", \"b\"],\n * [\"c\", \"b\", \"a\"]\n * ]\n */\nexport function permutations(arr: any[]): any[] {\n if (arr.length === 0) {\n return [[]];\n }\n return permutations(arr.slice(1)).reduce((acc, perm) => {\n return acc.concat(\n arr.map((e, pos) => {\n const newPerm = perm.slice();\n newPerm.splice(pos, 0, arr[0]);\n return newPerm;\n }),\n );\n }, []);\n}\n\n/** @deprecated */\nexport default {\n compact,\n permutations,\n range,\n rotate,\n shuffle,\n};\n"],"mappings":";AAEA,SAAS,KAAK,GAAW,GAAW;AAClC,QAAM,IAAI,CAAC;AAEX,SAAO,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE;AACzB,SAAO;AACT;AAEA,SAAS,MAAM,GAAW,GAAW;AACnC,QAAM,IAAI,CAAC;AAEX,SAAO,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE;AACzB,SAAO;AACT;AAaO,SAAS,MAAM,MAAc,IAAsB;AACxD,SAAO,OAAO,KAAK,KAAK,MAAM,KAAK,OAAO,CAAC,IAAI,MAAM,MAAM,OAAO,KAAK,CAAC;AAC1E;AAaO,SAAS,OAAU,OAAe,KAAe;AACtD,QAAM,MAAM,IAAI;AAChB,QAAM,KAAM,QAAQ,MAAO,OAAO;AAClC,SAAO,IAAI,MAAM,GAAG,GAAG,EAAE,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC;AACjD;AAWO,SAAS,QAAQ,KAAmB;AACzC,SAAO,IAAI,OAAO,CAAC,MAAM,MAAM,KAAK,CAAC;AACvC;AAYO,SAAS,QAAQ,KAAY,MAAM,KAAK,QAAe;AAC5D,MAAI;AACJ,MAAI;AACJ,MAAI,IAAY,IAAI;AACpB,SAAO,GAAG;AACR,QAAI,KAAK,MAAM,IAAI,IAAI,GAAG;AAC1B,QAAI,IAAI,CAAC;AACT,QAAI,CAAC,IAAI,IAAI,CAAC;AACd,QAAI,CAAC,IAAI;AAAA,EACX;AACA,SAAO;AACT;AAkBO,SAAS,aAAa,KAAmB;AAC9C,MAAI,IAAI,WAAW,GAAG;AACpB,WAAO,CAAC,CAAC,CAAC;AAAA,EACZ;AACA,SAAO,aAAa,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,SAAS;AACtD,WAAO,IAAI;AAAA,MACT,IAAI,IAAI,CAAC,GAAG,QAAQ;AAClB,cAAM,UAAU,KAAK,MAAM;AAC3B,gBAAQ,OAAO,KAAK,GAAG,IAAI,CAAC,CAAC;AAC7B,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,CAAC;AACP;AAGA,IAAO,qBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}