sequency
Version:
Functional sequences for processing iterable data in JavaScript
40 lines • 1.43 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.DistinctBy = void 0;
var Sequence_1 = require("./Sequence");
var DistinctByIterator = /** @class */ (function () {
function DistinctByIterator(iterator, selector) {
this.iterator = iterator;
this.selector = selector;
this.set = new Set();
}
DistinctByIterator.prototype.next = function (value) {
for (var item = this.iterator.next(); !item.done; item = this.iterator.next()) {
var key = this.selector(item.value);
var sizeBeforeAdd = this.set.size;
this.set.add(key);
if (this.set.size > sizeBeforeAdd) {
return { done: false, value: item.value };
}
}
this.set.clear();
return { done: true, value: undefined };
};
return DistinctByIterator;
}());
var DistinctBy = /** @class */ (function () {
function DistinctBy() {
}
/**
* Returns a new sequence which discards all elements with duplicate items determined
* by the given `selector`.
*
* @param {(item: T) => K} selector
* @returns {Sequence<T>}
*/
DistinctBy.prototype.distinctBy = function (selector) {
return (0, Sequence_1.createSequence)(new DistinctByIterator(this.iterator, selector));
};
return DistinctBy;
}());
exports.DistinctBy = DistinctBy;
//# sourceMappingURL=distinctBy.js.map