Skip to content

Commit a6b5699

Browse files
committed
feat(mapkeylastby): add mapKeyLastBy function
1 parent a33b091 commit a6b5699

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

index.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import {
3333
map,
3434
mapKeyBy,
3535
mapKeyFirstBy,
36+
mapKeyLastBy,
3637
maximum,
3738
minimum,
3839
only,
@@ -527,6 +528,14 @@ test("mapKeyFirstBy", t => {
527528
t.deepEqual(Array.from(map.keys()), ["odd", "even"]);
528529
});
529530

531+
test("mapKeyLastBy", t => {
532+
const map = mapKeyLastBy([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? "even" : "odd", String(e)]);
533+
t.deepEqual(Array.from(map.entries()), [
534+
["odd", "5"],
535+
["even", "6"]
536+
]);
537+
});
538+
530539
test("groupByIdentity", t => {
531540
t.deepEqual(
532541
groupByIdentity(["abc", "adef", "bghi"], a => a.substr(0, 1)),

index.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,26 @@ export function mapKeyFirstByFn<TKey, TElement, TNewElement>(
10961096
return array => mapKeyFirstBy(array, f);
10971097
}
10981098

1099+
export function mapKeyLastBy<TKey, TElement, TNewElement>(
1100+
array: ArrayLike<TElement>,
1101+
f: (element: TElement, index: number) => readonly [TKey, TNewElement]
1102+
): Map<TKey, TNewElement> {
1103+
const result = new Map<TKey, TNewElement>();
1104+
1105+
for (let i = 0; i < array.length; ++i) {
1106+
const [key, element] = f(array[i], i);
1107+
result.set(key, element);
1108+
}
1109+
1110+
return result;
1111+
}
1112+
1113+
export function mapKeyLastByFn<TKey, TElement, TNewElement>(
1114+
f: (element: TElement, index: number) => readonly [TKey, TNewElement]
1115+
): (array: ArrayLike<TElement>) => Map<TKey, TNewElement> {
1116+
return array => mapKeyLastBy(array, f);
1117+
}
1118+
10991119
export interface IdentityGrouping<T> {
11001120
readonly identity: (element: T) => unknown;
11011121
}

0 commit comments

Comments
 (0)