UNPKG

@naturalcycles/js-lib

Version:

Standard library for universal (browser + Node.js) javascript

56 lines (55 loc) 1.41 kB
import { Array2 } from './array2.js'; import { comparators } from './sort.js'; /** * Like Array, but keeps values sorted after every insertion. */ export class SortedArray extends Array2 { constructor(values = [], opt = {}) { super(...values); this.#comparator = opt.comparator; this.resort(); } #comparator; push(...values) { const length = super.push(...values); this.resort(); return length; } unshift(...values) { const length = super.unshift(...values); this.resort(); return length; } splice(start, deleteCount, ...items) { const removed = super.splice(start, deleteCount ?? this.length - start, ...items); if (items.length) { this.resort(); } return removed; } static get [Symbol.species]() { return Array; } get [Symbol.toStringTag]() { return 'Array'; } resort() { super.sort(this.#comparator); } } export class SortedStringArray extends SortedArray { constructor(values = []) { super(values); } get [Symbol.toStringTag]() { return 'Array'; } } export class SortedNumberArray extends SortedArray { constructor(values = []) { super(values, { comparator: comparators.numericAsc }); } get [Symbol.toStringTag]() { return 'Array'; } }