shared: add zip() function

Summary: This seems handy to use without depending on lodash. Code written by ChatGPT 4.

Reviewed By: zzl0

Differential Revision: D45073069

fbshipit-source-id: 9bb4a73d476d14310003dcce78df2515d4ff614c
This commit is contained in:
Jun Wu 2023-04-21 15:51:13 -07:00 committed by Facebook GitHub Bot
parent 2f93193774
commit 45c8d5e5f0

View File

@ -111,3 +111,19 @@ export function generatorContains<V>(gen: Generator<V>, value: V): boolean {
}
return false;
}
/**
* Zip 2 iterators.
*/
export function* zip<T, U>(iter1: Iterable<T>, iter2: Iterable<U>): IterableIterator<[T, U]> {
const iterator1 = iter1[Symbol.iterator]();
const iterator2 = iter2[Symbol.iterator]();
while (true) {
const result1 = iterator1.next();
const result2 = iterator2.next();
if (result1.done || result2.done) {
break;
}
yield [result1.value, result2.value];
}
}