UNPKG

@naturalcycles/js-lib

Version:

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

53 lines (42 loc) 1.02 kB
import { _shuffle } from './array.util.js' /** * Better Array. * * @experimental */ export class Array2<T> extends Array<T> { static override of<T>(...items: T[]): Array2<T> { return new Array2(...items) } // eslint-disable-next-line @typescript-eslint/class-literal-property-style get [Symbol.toStringTag](): string { return 'Array2' } firstOrUndefined(): T | undefined { return this[0] } first(): T { if (!this.length) throw new Error('Array.first called on empty array') return this[0]! } lastOrUndefined(): T | undefined { return this[this.length - 1] } last(): T { const { length } = this if (!length) throw new Error('Array.last called on empty array') return this[length - 1]! } uniq(): Array2<T> { return new Array2<T>(...new Set(this)) } shuffle(): Array2<T> { return new Array2(..._shuffle(this)) } isEmpty(): boolean { return this.length === 0 } isNotEmpty(): boolean { return this.length !== 0 } }