iteragain
Version:
Javascript Iterable/Iterator/Generator-function utilities.
32 lines • 1.06 kB
JavaScript
import toIterator from './toIterator';
import FilterIterator from './internal/FilterIterator';
export function unique(...args) {
var _a;
if (typeof args[0] === 'function' || !args.length)
return it => unique(it, args[0]);
const it = toIterator(args[0]);
args[1] = (_a = args[1]) !== null && _a !== void 0 ? _a : ((v) => v);
const { iteratee = (v) => v, justSeen = false } = typeof args[1] === 'function' ? { iteratee: args[1] } : args[1];
if (justSeen) {
let lastValue;
return new FilterIterator(it, value => {
value = iteratee(value);
if (!lastValue || value !== lastValue) {
lastValue = value;
return true;
}
return false;
});
}
const seen = new Set();
return new FilterIterator(it, value => {
value = iteratee(value);
if (!seen.has(value)) {
seen.add(value);
return true;
}
return false;
});
}
export default unique;
//# sourceMappingURL=unique.js.map