12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- "use strict";
-
- module.exports = class SortableSet extends Set {
-
- constructor(initialIterable, defaultSort) {
- super(initialIterable);
- this._sortFn = defaultSort;
- this._lastActiveSortFn = null;
- }
-
- /**
- * @param {any} value - value to add to set
- * @returns {SortableSet} - returns itself
- */
- add(value) {
- this._lastActiveSortFn = null;
- super.add(value);
- return this;
- }
-
- /**
- * @param {Function} sortFn - function to sort the set
- * @returns {void}
- */
- sortWith(sortFn) {
- if(this.size === 0 || sortFn === this._lastActiveSortFn) {
- // already sorted - nothing to do
- return;
- }
-
- const sortedArray = Array.from(this).sort(sortFn);
- super.clear();
- for(let i = 0; i < sortedArray.length; i += 1) {
- this.add(sortedArray[i]);
- }
- this._lastActiveSortFn = sortFn;
- }
-
- /**
- * @returns {void}
- */
- sort() {
- this.sortWith(this._sortFn);
- }
- };
|