UNPKG

@extra-array/unique

Version:
40 lines (39 loc) 854 B
function id(v) { return v; } function cmp(a, b) { return a < b ? -1 : (a > b ? 1 : 0); } function uniqueMap(x, fn = null) { var fn = fn || id; var s = new Set(); var a = [], i = -1; for (var v of x) { var v1 = fn(v, ++i, x); if (s.has(v1)) continue; s.add(v1); a.push(v); } return a; } function uniqueDual(x, fc = null, fm = null) { var fc = fc || cmp, fm = fm || id; var s = [], a = [], i = -1; x: for (var v of x) { var v1 = fm(v, ++i, x); for (var u1 of s) if (fc(u1, v1) === 0) continue x; s.push(v1); a.push(v); } return a; } function unique(x, fc = null, fm = null) { if (fc) return uniqueDual(x, fc, fm); else return uniqueMap(x, fm); } export { unique as default };