Skip to content

Commit 60d405e

Browse files
committed
feat(asyncKeyLastByOnce): add asyncKeyLastByOnce function
1 parent bfb4029 commit 60d405e

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

index.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
asyncIterator,
2929
asyncKeyByOnce,
3030
asyncKeyFirstByOnce,
31+
asyncKeyLastByOnce,
3132
asyncLastOnce,
3233
asyncMapOnce,
3334
asyncMaximumByOnce,
@@ -660,3 +661,13 @@ test("asyncKeyFirstByOnce", async t => {
660661
["even", 4]
661662
]);
662663
});
664+
665+
test("asyncKeyLastByOnce", async t => {
666+
const map = await asyncKeyLastByOnce(asyncIterator([1, 3, 4, 2, 5, 6]), e =>
667+
e % 2 === 0 ? "even" : "odd"
668+
);
669+
t.deepEqual(Array.from(map.entries()), [
670+
["odd", 5],
671+
["even", 6]
672+
]);
673+
});

index.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,3 +1249,25 @@ export function asyncKeyFirstByOnceFn<TKey, TElement>(
12491249
): (iterator: AsyncIteratorLike<TElement>) => Promise<Map<TKey, TElement>> {
12501250
return async iterator => asyncKeyFirstByOnce(iterator, f);
12511251
}
1252+
1253+
export async function asyncKeyLastByOnce<TKey, TElement>(
1254+
iterator: AsyncIteratorLike<TElement>,
1255+
f: (element: TElement, index: number) => TKey | Promise<TKey>
1256+
): Promise<Map<TKey, TElement>> {
1257+
const it = asyncIterator(iterator);
1258+
const map = new Map<TKey, TElement>();
1259+
for (
1260+
let i = 0, element = await it.next();
1261+
element.done !== true;
1262+
++i, element = await it.next()
1263+
) {
1264+
map.set(await f(element.value, i), element.value);
1265+
}
1266+
return map;
1267+
}
1268+
1269+
export function asyncKeyLastByOnceFn<TKey, TElement>(
1270+
f: (element: TElement, index: number) => TKey | Promise<TKey>
1271+
): (iterator: AsyncIteratorLike<TElement>) => Promise<Map<TKey, TElement>> {
1272+
return async iterator => asyncKeyLastByOnce(iterator, f);
1273+
}

0 commit comments

Comments
 (0)