cerceis-lib
Version:
Contains list of quality of life functions that is written in TypeScript and es6
1 lines • 8.96 kB
Source Map (JSON)
{"version":3,"sources":["../../src/array/index.ts"],"sourcesContent":["export const FromArray = {\n /**\n * Returns one or more random elements from an array.\n * @param arr Input array.\n * @param noOfResult Number of results to return (default 1).\n * @param returnIndex Return index positions instead of values.\n */\n getRandom<T>(arr: T[], noOfResult: number = 1, returnIndex: boolean = false): T[] | number[] {\n if (!Array.isArray(arr)) throw new Error(\"Input must be an array\");\n if (returnIndex) {\n const result: number[] = [];\n for (let i = 0; i < noOfResult; i++)\n result.push(Math.floor(Math.random() * arr.length));\n return result;\n }\n const result: T[] = [];\n for (let i = 0; i < noOfResult; i++)\n result.push(arr[Math.floor(Math.random() * arr.length)]);\n return result;\n },\n /**\n * Find and return the largest N numbers.\n * @param numbers Array of numbers.\n * @param n Number of results to return (default 1).\n * @param returnIndex Return indices instead of values.\n */\n getLargest(numbers: number[], n: number = 1, returnIndex: boolean = false): number[] {\n const results: number[] = [];\n if (returnIndex) {\n const indexed = numbers.map((v, i) => ({ v, i })).sort((a, b) => b.v - a.v);\n for (let i = 0; i < n && i < indexed.length; i++) results.push(indexed[i].i);\n } else {\n const sorted = [...numbers].sort((a, b) => b - a);\n for (let i = 0; i < n && i < sorted.length; i++) results.push(sorted[i]);\n }\n return results;\n },\n /**\n * Find and return the smallest N numbers.\n * @param numbers Array of numbers.\n * @param n Number of results to return (default 1).\n * @param returnIndex Return indices instead of values.\n */\n getSmallest(numbers: number[], n: number = 1, returnIndex: boolean = false): number[] {\n const results: number[] = [];\n if (returnIndex) {\n const indexed = numbers.map((v, i) => ({ v, i })).sort((a, b) => a.v - b.v);\n for (let i = 0; i < n && i < indexed.length; i++) results.push(indexed[i].i);\n } else {\n const sorted = [...numbers].sort((a, b) => a - b);\n for (let i = 0; i < n && i < sorted.length; i++) results.push(sorted[i]);\n }\n return results;\n },\n /**\n * Return the intersection of two arrays.\n * @param arrA Array A.\n * @param arrB Array B.\n * @param duplicated Include duplicate matches.\n */\n getIntersect<T>(arrA: T[], arrB: T[], duplicated: boolean = false): T[] {\n const seen = new Map<string, number>();\n const result: T[] = [];\n for (const item of arrA) seen.set(String(item), 1);\n for (const item of arrB) {\n const key = String(item);\n if (seen.has(key)) {\n if (!duplicated && seen.get(key) === 1) {\n result.push(item);\n seen.set(key, 2);\n } else if (duplicated) {\n result.push(item);\n }\n }\n }\n return result;\n },\n /**\n * Randomly shuffle an array in-place (Fisher-Yates).\n * @param arr Array to shuffle.\n */\n shuffle<T>(arr: T[]): T[] {\n let currentIndex = arr.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n [arr[currentIndex], arr[randomIndex]] = [arr[randomIndex], arr[currentIndex]];\n }\n return arr;\n },\n /**\n * The Thanos snap — removes roughly half the elements randomly.\n * Mutates the original array.\n * @param arr Input array.\n */\n thanosSnap<T>(arr: T[]): T[] {\n const targetLen = arr.length % 2 === 0 ? arr.length / 2 : (arr.length - 1) / 2;\n while (arr.length !== targetLen)\n arr.splice(Math.floor(Math.random() * arr.length), 1);\n return arr;\n },\n /**\n * Convert a 2D array ([[key, value], ...]) into an object.\n * @param arr Input 2D array.\n */\n toObject<V>(arr: [string | number, V][]): Record<string | number, V> {\n const obj: Record<string | number, V> = {};\n for (const [k, v] of arr) obj[k] = v;\n return obj;\n },\n /**\n * Split an array into groups by ratio.\n * ex) [1,2,3,4] split [1,3] → {1:[1], 2:[2,3,4]}\n * Remainder goes into \"extra\" if it doesn't fit.\n * @param arr Array to split.\n * @param ratio Ratio to split into.\n */\n splitInto<T>(arr: T[], ratio: number[]): Record<string, T[]> {\n if (ratio.length === 0) return { 1: arr };\n const filtered = ratio.filter((r) => r !== 0 && !isNaN(r));\n const unitLen = Math.floor((1 / filtered.reduce((a, b) => a + b)) * arr.length);\n const rs: Record<string, T[]> = {};\n let group = 1;\n let offset = 0;\n for (const r of ratio) {\n const len = r * unitLen;\n rs[group] = arr.slice(offset, offset + len);\n offset += rs[group].length;\n group++;\n }\n if (offset < arr.length) rs[\"extra\"] = arr.slice(offset);\n return rs;\n },\n /**\n * Log array elements to console, optionally limited to a range.\n * @param arr Array to log.\n * @param from Starting index (inclusive), default 0.\n * @param to Ending index (exclusive), default arr.length.\n */\n log<T>(arr: T[], from: number = 0, to: number = arr.length): void {\n for (let i = from; i < to; i++) console.log(arr[i]);\n },\n};\n"],"mappings":"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","names":["result"]}