@extra-array/unique
Version:
Removes duplicate values.
41 lines (40 loc) • 863 B
JavaScript
;
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);
}
module.exports = unique;