RosettaCodeData/Task/Remove-duplicate-elements/JavaScript/remove-duplicate-elements-6.js

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('')
]
})();