export default abstract class Lists { static last(list: T[]) { return list[list.length - 1] } static getIndex(list: T[], where: (val: T) => boolean) { for (let i = list.length - 1; i >= 0; i--){ if (where(list[i])) { return i } } return list.length } static removeAt(list: T[], id: number) { list.splice(id, 1) } static removeFrom(list: T[], start: number) { list.splice(start) } static removeFirst(list: T[], where: (val: T) => boolean) { this.removeAt(list, this.getIndex(list, where)) } static removeFirstBy(list: T[], mapper: (val: T) => U, val: U) { this.removeFirst(list, e => mapper(e) === val) } static pushAll(list: T[], elems: T[]) { list.push.apply(list, elems) } static clear(list: T[]) { list.splice(0, list.length) } static for(list: T[], action: (val: T, id: number, list: T[]) => void) { for (let i = 0; i < list.length; i++){ action(list[i], i, list) } } }