Javascript Zip Iterables

Date: 2021-09-21

Source: https://s0ands0.github.io/100-days-of-code/r001/068-javascript-zip-iterators/

// The same function but fully looping all arrays:
const zip = (rows) => rows[0].map((_,c)=>rows.map(row=>row[c]));

function* iterator(iterable) {
	for(const item of iterable) yield item;
}

function* zipIterables(...iterables) {
	const iterators = iterables.map(x => iterator(x));
	
	while (true) {
		const stats = [];
		const results = [];

		for (const iterable of iterators) {
			const result = iterable.next();
			stats.push(result.done);
			results.push(result.value);
		}

		if (stats.every((stat) => stat === true)) {
			break;
		}
		yield results;
	}
}

console.log(Array.from(zipIterables([1, 2, 3], ['A', 'B'], ['I', 'II', 'III', 'IIII'])));

// results in:
[1, 'A', 'I']
[2, 'B', 'II']
[3,    , 'III']
[ ,    , 'IIII']
53290cookie-checkJavascript Zip Iterables