Skip to content

Commit 88acf27

Browse files
committed
feat(mapKeyLastByOnce): add mapKeyLastByOnce function
1 parent 1c038b7 commit 88acf27

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

index.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
lastOnce,
3232
mapKeyByOnce,
3333
mapKeyFirstByOnce,
34+
mapKeyLastByOnce,
3435
mapOnce,
3536
maximumByOnce,
3637
maximumOnce,
@@ -500,3 +501,14 @@ test("mapKeyFirstByOnce", t => {
500501
t.is(map.get("odd"), "1");
501502
t.deepEqual(Array.from(map.keys()), ["odd", "even"]);
502503
});
504+
505+
test("mapKeyLastByOnce", t => {
506+
const map = mapKeyLastByOnce(iterator([1, 3, 4, 2, 5, 6]), e => [
507+
e % 2 === 0 ? "even" : "odd",
508+
String(e)
509+
]);
510+
t.deepEqual(Array.from(map.entries()), [
511+
["odd", "5"],
512+
["even", "6"]
513+
]);
514+
});

index.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,3 +1114,22 @@ export function mapKeyFirstByOnceFn<TKey, TElement, TNewElement>(
11141114
): (iterator: IteratorLike<TElement>) => Map<TKey, TNewElement> {
11151115
return iterator => mapKeyFirstByOnce(iterator, f);
11161116
}
1117+
1118+
export function mapKeyLastByOnce<TKey, TElement, TNewElement>(
1119+
iterator: IteratorLike<TElement>,
1120+
f: (element: TElement, index: number) => readonly [TKey, TNewElement]
1121+
): Map<TKey, TNewElement> {
1122+
const it = toIterator(iterator);
1123+
const map = new Map<TKey, TNewElement>();
1124+
for (let i = 0, element = it.next(); element.done !== true; ++i, element = it.next()) {
1125+
const [key, value] = f(element.value, i);
1126+
map.set(key, value);
1127+
}
1128+
return map;
1129+
}
1130+
1131+
export function mapKeyLastByOnceFn<TKey, TElement, TNewElement>(
1132+
f: (element: TElement, index: number) => readonly [TKey, TNewElement]
1133+
): (iterator: IteratorLike<TElement>) => Map<TKey, TNewElement> {
1134+
return iterator => mapKeyLastByOnce(iterator, f);
1135+
}

0 commit comments

Comments
 (0)