import * as _ from "underscore"; import { IArrayUtils } from "../definitions"; export class UnderscoreArrayUtils implements IArrayUtils { first(items: T[], n: number) { return _.first(items, n); } find(items: T[], func: (t: T, index: number) => boolean) { return _.find(items, func); } each(items: T[], func: (t: T, index: number) => void) { _.each(items, func); } every(items: T[], func: (t: T, index: number) => boolean): boolean { return _.every(items, func); } some(items: T[], func: (t: T, index: number) => boolean): boolean { return _.some(items, func); } filterByArray(items: T[], filterItems: any[], filterKey: keyof T): T[] { return _.filter(items, (item: T, index: number) => { return filterItems.indexOf(item[filterKey]) !== -1; }); } reduce( items: T[], func: (memo: M, item: T, index: number) => M, memo: M, ): M { return _.reduce(items, func, memo); } reject(items: T[], func: (t: T, index: number) => boolean): T[] { return _.reject(items, func); } filter(items: T[], func: (t: T, index: number) => boolean): T[] { return _.filter(items, func); } range(start: number, stop: number, step: number = 1, fill?: boolean) { return _.range(start, fill ? stop + 1 : stop, step); } getPage(items: T[], pageNumber: number, pageSize: number) { const startIndex = (pageNumber - 1) * pageSize; const endIndex = startIndex + pageSize; return this.filter(items, (__, i) => i >= startIndex && i < endIndex); } }