{"id":9463,"date":"2025-04-22T15:27:35","date_gmt":"2025-04-22T14:27:35","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=9463"},"modified":"2025-04-22T15:27:36","modified_gmt":"2025-04-22T14:27:36","slug":"typescript-array-iterable-helpers","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/typescript-array-iterable-helpers\/","title":{"rendered":"Typescript Array \/ Iterable Helpers"},"content":{"rendered":"\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"typescript\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">type IterableKind&lt;T> = Iterable&lt;T> | T[];\n\nexport function ensureArray&lt;T>(data?: IterableKind&lt;T>): T[] {\n    if (!data) return [];\n    if (Array.isArray(data)) return data;\n    if (typeof data === \"string\") return [data];\n    if (data instanceof Map) return [];\n    return Array.from(data);\n}\n\nexport function firstItem&lt;T>(data?: IterableKind&lt;T>): T | undefined {\n    return ensureArray(data)[0];\n};\n\nexport function arraySum&lt;T>(arr: IterableKind&lt;T>, fn: (arg: T) => number): number {\n    return ensureArray(arr).reduce((p, c) => p + fn(c), 0);\n}\n\nexport function arrayMin&lt;T>(arr: IterableKind&lt;T>, fn: (arg: T) => number): number | undefined {\n    const values = ensureArray(arr).map(fn);\n    return values.length ? Math.min.apply(Math, values) : undefined;\n}\n\nexport function arrayMax&lt;T>(arr: IterableKind&lt;T>, fn: (arg: T) => number): number | undefined {\n    const values = ensureArray(arr).map(fn);\n    return values.length ? Math.max.apply(Math, values) : undefined;\n}\n\nexport function createMap&lt;TSource, TKey, TValue>(items: Iterable&lt;TSource>, keySelector: (x: TSource) => TKey, valueSelector: (x: TSource) => TValue): Map&lt;TKey, TValue> {\n    const m = new Map&lt;TKey, TValue>();\n    for (const item of items) {\n        const key = keySelector(item);\n        const value = valueSelector(item);\n        m.set(key, value);\n    }\n    return m;\n}\n\nexport function distinctBy&lt;T, K>(array: IterableKind&lt;T>, keySelector: (item: T) => K): T[] {\n    const seen = new Map&lt;K, T>();\n    for (const item of array) {\n        const key = keySelector(item);\n        if (!seen.has(key)) {\n            seen.set(key, item);\n        }\n    }\n    return Array.from(seen.values());\n}<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-9463","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/9463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=9463"}],"version-history":[{"count":1,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/9463\/revisions"}],"predecessor-version":[{"id":9464,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/9463\/revisions\/9464"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=9463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=9463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=9463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}