@extra-array/zip
Version:
Combines values from arrays.
35 lines (34 loc) • 780 B
JavaScript
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;
}
export { zip as default };