@apicart/js-utils
Version:
A small set of useful utilities for easier development
74 lines (61 loc) • 1.58 kB
text/typescript
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();