UNPKG

@apicart/js-utils

Version:

A small set of useful utilities for easier development

74 lines (61 loc) 1.58 kB
class Loops { public forEach(iterable: any | null, callback: Function): this { let iterator: number; const iteratorObject = { iterableLength: 0, counter: 0, isEven: function (): boolean { return this.counter % 2 === 0; }, isOdd: function (): boolean { return Math.abs(this.counter % 2) === 1; }, isFirst: function (): boolean { return this.counter === 1; }, isLast: function (): boolean { return this.counter === this.iterableLength; } }; let iterableLength: number; let statement: boolean; let keys: string[]; let keysLength: number; let key: string|number; if (iterable === null || ['undefined', 'number'].includes(typeof iterable)) { return; } if (Array.isArray(iterable)) { iterableLength = Object.keys(iterable).length; if (!iterableLength) { return; } iteratorObject.iterableLength = iterableLength; for (iterator = 0; iterator < iterableLength; iterator++) { iteratorObject.counter++; statement = callback.apply(iteratorObject, [iterable[iterator], iterator]); if (statement === false) { break; } } } else { keys = Object.keys(iterable); keysLength = keys.length; if (!keys.length) { return; } iteratorObject.iterableLength = keysLength; for (iterator = 0; iterator < keysLength; iterator++) { iteratorObject.counter++; key = keys[iterator]; statement = callback.apply(iteratorObject, [iterable[key], key]); if (statement === false) { break; } } } return this; } } export default new Loops();