40 lines
842 B
JavaScript
40 lines
842 B
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
// nub :: [a] -> [a]
|
|
function nub(xs) {
|
|
|
|
// Eq :: a -> a -> Bool
|
|
function Eq(a, b) {
|
|
return a === b;
|
|
}
|
|
|
|
// nubBy :: (a -> a -> Bool) -> [a] -> [a]
|
|
function nubBy(fnEq, xs) {
|
|
var x = xs.length ? xs[0] : undefined;
|
|
|
|
return x !== undefined ? [x].concat(
|
|
nubBy(fnEq, xs.slice(1)
|
|
.filter(function (y) {
|
|
return !fnEq(x, y);
|
|
}))
|
|
) : [];
|
|
}
|
|
|
|
return nubBy(Eq, xs);
|
|
}
|
|
|
|
|
|
// TEST
|
|
|
|
return [
|
|
nub('4 3 2 8 0 1 9 5 1 7 6 3 9 9 4 2 1 5 3 2'.split(' '))
|
|
.map(function (x) {
|
|
return Number(x);
|
|
}),
|
|
nub('chthonic eleemosynary paronomasiac'.split(''))
|
|
.join('')
|
|
]
|
|
|
|
})();
|