UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

36 lines (35 loc) 1.18 kB
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; }