iteragain
Version:
Javascript Iterable/Iterator/Generator-function utilities.
37 lines • 1.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.unique = unique;
const toIterator_1 = require("./toIterator");
const FilterIterator_1 = require("./internal/FilterIterator");
function unique(...args) {
var _a;
if (typeof args[0] === 'function' || !args.length)
return it => unique(it, args[0]);
const it = (0, toIterator_1.default)(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;
let hasLastValue = false;
return new FilterIterator_1.default(it, value => {
value = iteratee(value);
if (!hasLastValue || value !== lastValue) {
lastValue = value;
hasLastValue = true;
return true;
}
return false;
});
}
const seen = new Set();
return new FilterIterator_1.default(it, value => {
value = iteratee(value);
if (!seen.has(value)) {
seen.add(value);
return true;
}
return false;
});
}
exports.default = unique;
//# sourceMappingURL=unique.js.map