@@ -1271,3 +1271,33 @@ export function asyncKeyLastByOnceFn<TKey, TElement>(
12711271) : ( iterator : AsyncIteratorLike < TElement > ) => Promise < Map < TKey , TElement > > {
12721272 return async iterator => asyncKeyLastByOnce ( iterator , f ) ;
12731273}
1274+
1275+ export async function asyncMapKeyByOnce < TKey , TElement , TNewElement > (
1276+ iterator : AsyncIteratorLike < TElement > ,
1277+ f : (
1278+ element : TElement ,
1279+ index : number
1280+ ) => readonly [ TKey , TNewElement ] | Promise < readonly [ TKey , TNewElement ] >
1281+ ) : Promise < Map < TKey , readonly TNewElement [ ] > > {
1282+ const it = asyncIterator ( iterator ) ;
1283+ const map = new Map < TKey , readonly TNewElement [ ] > ( ) ;
1284+ for (
1285+ let i = 0 , element = await it . next ( ) ;
1286+ element . done !== true ;
1287+ ++ i , element = await it . next ( )
1288+ ) {
1289+ const [ key , value ] = await f ( element . value , i ) ;
1290+ const entries = map . get ( key ) ?? [ ] ;
1291+ map . set ( key , [ ...entries , value ] ) ;
1292+ }
1293+ return map ;
1294+ }
1295+
1296+ export function asyncMapKeyByOnceFn < TKey , TElement , TNewElement > (
1297+ f : (
1298+ element : TElement ,
1299+ index : number
1300+ ) => readonly [ TKey , TNewElement ] | Promise < readonly [ TKey , TNewElement ] >
1301+ ) : ( iterator : AsyncIteratorLike < TElement > ) => Promise < Map < TKey , readonly TNewElement [ ] > > {
1302+ return async iterator => asyncMapKeyByOnce ( iterator , f ) ;
1303+ }
0 commit comments