Skip to content

Commit 38a6f61

Browse files
committed
feat(asyncMapKeyLastByOnce): add asyncMapKeyLastByOnce function
1 parent b61ef21 commit 38a6f61

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

index.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
asyncLastOnce,
3333
asyncMapKeyByOnce,
3434
asyncMapKeyFirstByOnce,
35+
asyncMapKeyLastByOnce,
3536
asyncMapOnce,
3637
asyncMaximumByOnce,
3738
asyncMaximumOnce,
@@ -693,3 +694,14 @@ test("asyncMapKeyFirstByOnce", async t => {
693694
t.is(map.get("odd"), "1");
694695
t.deepEqual(Array.from(map.keys()), ["odd", "even"]);
695696
});
697+
698+
test("asyncMapKeyLastByOnce", async t => {
699+
const map = await asyncMapKeyLastByOnce(asyncIterator([1, 3, 4, 2, 5, 6]), e => [
700+
e % 2 === 0 ? "even" : "odd",
701+
String(e)
702+
]);
703+
t.deepEqual(Array.from(map.entries()), [
704+
["odd", "5"],
705+
["even", "6"]
706+
]);
707+
});

index.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1332,3 +1332,32 @@ export function asyncMapKeyFirstByOnceFn<TKey, TElement, TNewElement>(
13321332
): (iterator: AsyncIteratorLike<TElement>) => Promise<Map<TKey, TNewElement>> {
13331333
return async iterator => asyncMapKeyFirstByOnce(iterator, f);
13341334
}
1335+
1336+
export async function asyncMapKeyLastByOnce<TKey, TElement, TNewElement>(
1337+
iterator: AsyncIteratorLike<TElement>,
1338+
f: (
1339+
element: TElement,
1340+
index: number
1341+
) => readonly [TKey, TNewElement] | Promise<readonly [TKey, TNewElement]>
1342+
): Promise<Map<TKey, TNewElement>> {
1343+
const it = asyncIterator(iterator);
1344+
const map = new Map<TKey, TNewElement>();
1345+
for (
1346+
let i = 0, element = await it.next();
1347+
element.done !== true;
1348+
++i, element = await it.next()
1349+
) {
1350+
const [key, value] = await f(element.value, i);
1351+
map.set(key, value);
1352+
}
1353+
return map;
1354+
}
1355+
1356+
export function asyncMapKeyLastByOnceFn<TKey, TElement, TNewElement>(
1357+
f: (
1358+
element: TElement,
1359+
index: number
1360+
) => readonly [TKey, TNewElement] | Promise<readonly [TKey, TNewElement]>
1361+
): (iterator: AsyncIteratorLike<TElement>) => Promise<Map<TKey, TNewElement>> {
1362+
return async iterator => asyncMapKeyLastByOnce(iterator, f);
1363+
}

0 commit comments

Comments
 (0)