UNPKG

@extra-array/zip

Version:
36 lines (35 loc) 789 B
'use strict'; function id(v) { return v; } function someBool(x) { for (var i = 0, I = x.length; i < I; i++) if (x[i]) return true; return false; } function some(x, ft = null) { if (ft) return x.some(ft); else return someBool(x); } function zip(xs, fm = null, ft = null, vd) { var fm = fm || id, ft = ft || some; var X = xs.length, a = []; if (X === 0) return a; var ds = new Array(X).fill(false); var ls = xs.map(x => x.length); for (var i = 0;; i++) { for (var j = 0, vs = []; j < X; j++) { ds[j] = i >= ls[j]; vs[j] = ds[j] ? vd : xs[j][i]; } if (ft(ds)) break; a.push(fm(vs, i, null)); } return a; } module.exports = zip;