diff --git a/src/common/Extend.ts b/src/common/Extend.ts index 6173789..9d82a79 100644 --- a/src/common/Extend.ts +++ b/src/common/Extend.ts @@ -563,6 +563,23 @@ interface Array { * @param n n > 0 右移, n<0 左移 */ moveElement?(n: number): T[]; + + /** + * 两个数组并集 + * @param arr + */ + union?(arr: T[]): T[]; + + /** + * 两个数组交集 + * @param arr + */ + intersect?(arr: T[]): T[]; + /** + * 相对于arr的差集 + * @param arr + */ + difference?(arr: T[]): T[]; } Object.defineProperties(Array.prototype, { @@ -815,6 +832,32 @@ Object.defineProperties(Array.prototype, { return this.slice(-n).concat(this.slice(0, -n)); }, writable: true + }, + + union: { + value: function (this: T[], b: any[]): T[] { + let a = this.concat(b); + return [...new Set(a)]; + }, + writable: true + }, + + intersect: { + value: function (this: T[], b: any[]): T[] { + let set0 = new Set(b); + let set1 = new Set(this.filter (x => set0.has(x))); + return [...set1]; + }, + writable: true + }, + + difference: { + value: function (this: T[], b: any[]): T[] { + let set0 = new Set(b); + let set1 = new Set(this.filter(x => !set0.has(x))); + return [...set1]; + }, + writable: true } });