diff options
| author | ST-DDT <[email protected]> | 2023-11-07 17:26:27 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-11-07 16:26:27 +0000 |
| commit | 8542ef30bd4eda3d9f04db2c4a79abf0369d57c3 (patch) | |
| tree | 94f768aa2c1c48faedddb745843f6d0b34b19988 /src | |
| parent | 9498203190e37a96114ddc8e861b02ccd94e517b (diff) | |
| download | faker-8542ef30bd4eda3d9f04db2c4a79abf0369d57c3.tar.xz faker-8542ef30bd4eda3d9f04db2c4a79abf0369d57c3.zip | |
infra(unicorn): no-array-reduce (#2479)
Diffstat (limited to 'src')
| -rw-r--r-- | src/internal/group-by.ts | 25 | ||||
| -rw-r--r-- | src/modules/word/filter-word-list-by-length.ts | 10 |
2 files changed, 27 insertions, 8 deletions
diff --git a/src/internal/group-by.ts b/src/internal/group-by.ts new file mode 100644 index 00000000..ff3242c9 --- /dev/null +++ b/src/internal/group-by.ts @@ -0,0 +1,25 @@ +/** + * Groups the values by the key function. + * + * @internal + * + * @param values The values to group. + * @param keyFunction The function to get the key from the value. + */ +export function groupBy<TValue>( + values: ReadonlyArray<TValue>, + keyFunction: (value: TValue) => string | number +): Record<string, TValue[]> { + const result: Record<string, TValue[]> = {}; + + for (const value of values) { + const key = keyFunction(value); + if (result[key] === undefined) { + result[key] = []; + } + + result[key].push(value); + } + + return result; +} diff --git a/src/modules/word/filter-word-list-by-length.ts b/src/modules/word/filter-word-list-by-length.ts index 60c6fae9..f3fcd5ab 100644 --- a/src/modules/word/filter-word-list-by-length.ts +++ b/src/modules/word/filter-word-list-by-length.ts @@ -1,4 +1,5 @@ import { FakerError } from '../../errors/faker-error'; +import { groupBy } from '../../internal/group-by'; /** * The error handling strategies for the `filterWordListByLength` function. @@ -13,14 +14,7 @@ const STRATEGIES = { wordList: ReadonlyArray<string>, length: { min: number; max: number } ): string[] => { - const wordsByLength = wordList.reduce<Record<number, string[]>>( - (data, word) => { - (data[word.length] = data[word.length] ?? []).push(word); - return data; - }, - {} - ); - + const wordsByLength = groupBy(wordList, (word) => word.length); const lengths = Object.keys(wordsByLength).map(Number); const min = Math.min(...lengths); const max = Math.max(...lengths); |
