locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
36 lines (35 loc) • 1.18 kB
JavaScript
export function zip(left, right) {
// discuss at: https://locutus.io/elixir/zip/
// parity verified: Elixir 1.18
// original by: Kevin van Zonneveld (https://kvz.io)
// example 1: zip([1, 2], [3, 4])
// returns 1: [[1, 3], [2, 4]]
// example 2: zip([[1, 2], ['a', 'b'], [true, false]])
// returns 2: [[1, 'a', true], [2, 'b', false]]
// example 3: zip([1, 2, 3], ['a'])
// returns 3: [[1, 'a']]
if (right !== undefined) {
if (!Array.isArray(left) || !Array.isArray(right)) {
return [];
}
const size = Math.min(left.length, right.length);
const out = [];
for (let i = 0; i < size; i++) {
out.push([left[i], right[i]]);
}
return out;
}
if (!Array.isArray(left) || left.length === 0) {
return [];
}
if (!left.every((value) => Array.isArray(value))) {
return [];
}
const lists = left;
const size = Math.min(...lists.map((value) => value.length));
const out = [];
for (let i = 0; i < size; i++) {
out.push(lists.map((value) => value[i]));
}
return out;
}