export { } //creating a module of below code declare global { type predicate<T> = (arg: T) => boolean; interface Array<T> { FirstOrDefault<T>(condition: predicate<T>): T; LastOrDefault<T>(condition: predicate<T>): T; Where<T>(condition: predicate<T>): T[]; Select<T>(...properties: (keyof T)[]): any[]; GroupBy<T>(groupFunc: (arg: T) => string): any[]; EnumerableRange(start: number, count: number): number[]; Any<T>(condition: predicate<T>): boolean; All<T>(condition: predicate<T>): boolean; } } if (!Array.prototype.FirstOrDefault) { Array.prototype.FirstOrDefault = function <T>(condition: predicate<T>): T { let matchingItems: T[] = this.filter((item: T) => { if (condition(item)) return item; }); return matchingItems.length > 0 ? matchingItems[0] : null; } } if (!Array.prototype.Any) { Array.prototype.Any = function <T>(condition: predicate<T>): boolean { if (this.length === 0) return false; let result: boolean = false; for (let index = 0; index < this.length; index++) { const element = this[index]; if (condition(element)) { result = true; break; } } return result; } } if (!Array.prototype.All) { Array.prototype.All = function <T>(condition: predicate<T>): boolean { if (this.length === 0) return false; let result: boolean = true; for (let index = 0; index < this.length; index++) { const element = this[index]; if (!condition(element)) { result = false; } } return result; } } if (!Array.prototype.LastOrDefault) { Array.prototype.LastOrDefault = function <T>(condition: predicate<T>): T { let matchingItems: T[] = this.filter((item: T) => { if (condition(item)) return item; }); return matchingItems.length > 0 ? matchingItems[matchingItems.length - 1] : null; } } if (!Array.prototype.Select) { Array.prototype.Select = function <T>(...properties: (keyof T)[]): any[] { let result = []; for (let i = 0; i < this.length; i++) { let item: any = {}; for (let j = 0; j < properties.length; j++) { let key = properties[j]; item[key] = this[i][properties[j]]; } result.push(item); } return result; } } if (!Array.prototype.GroupBy) { Array.prototype.GroupBy = function <T>(groupFunc: (arg: T) => string): any[] { let groups: any = {}; this.forEach(el => { let itemKeyValue: any = groupFunc(el); if (itemKeyValue in groups === false) { groups[itemKeyValue] = []; } groups[itemKeyValue].push(el); }); let result = Object.keys(groups).map(key => { return { key: key, values: groups[key] } }); return result; } } function* Range(start, count) { for (let x = start; x < start + count; x++) { yield x; } } if (!Array.prototype.EnumerableRange) { Array.prototype.EnumerableRange = function (start: number, count: number): number[] { let generatedRange = [...Range(start, count)]; return generatedRange; } } if (!Array.prototype.Where) { Array.prototype.Where = function <T>(condition: predicate<T>): T[] { let matchingItems: T[] = this.filter((item: T) => { if (condition(item)) { return true; } }); return matchingItems; } }
Showing posts with label Angular8. Show all posts
Showing posts with label Angular8. Show all posts
Monday, 30 December 2019
More methods: Any, All, EnumerableRange, GroupBy for Linq like library written in TypeScript
I am extending my TypeScript library written to target Linq like methods, which can be used with Angular 8 and Typescript also.
You can find my Github repo SimpleLinqLibraryTs here:
https://github.com/toreaurstadboss/SimpleLinqLibraryTs/blob/master/src/app/array-extensions.ts
Etiketter:
Angular,
Angular8,
Functional programming,
Linq,
Typescript
Subscribe to:
Posts (Atom)