@extra-array/merge
Version:
Merges values from sorted iterables.
27 lines • 722 B
JavaScript
import min from './min';
/**
* Merges values from sorted iterables.
* @param xs iterables
* @param fc compare function (a, b)
* @param fm map function (v, i, x)
*/
function merge(xs, fc = null, fm = null) {
var X = xs.length, a = [];
if (X === 0)
return a;
var is = new Array(X).fill(0);
var xs = xs.filter(x => x.length > 0);
while (xs.length > 0) {
for (var i = 0, I = xs.length, vs = []; i < I; i++)
vs[i] = xs[i][is[i]];
var i = min(vs, fc, fm)[0];
a.push(vs[i]);
if (++is[i] < xs[i].length)
continue;
xs.splice(i, 1);
is.splice(i, 1);
}
return a;
}
export default merge;
//# sourceMappingURL=index.js.map