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:
Comments (Atom)