@etsoo/shared 1.1.96 → 1.1.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -102,6 +102,9 @@ Array related utilities
102
102
  |Name|Description|
103
103
  |---:|---|
104
104
  |differences|Array 1 items do not exist in Array 2 or reverse match|
105
+ |max|Get max number item or number item property|
106
+ |min|Get min number item or number item property|
107
+ |sum|Sum number items or number item properties|
105
108
  |toUnique|Make all items are unique|
106
109
 
107
110
  ## DataTypes
@@ -20,3 +20,32 @@ test('Tests for differences', () => {
20
20
  expect(ArrayUtils.differences(a1, a2)).toEqual(['b', 'e']);
21
21
  expect(ArrayUtils.differences(a1, a2, true)).toEqual(['b', 'e', 'd']);
22
22
  });
23
+
24
+ test('Tests for sum numbers', () => {
25
+ const items = [12, 8, 22];
26
+ expect(items.sum()).toBe(42);
27
+ });
28
+
29
+ test('Tests for sum fields', () => {
30
+ const items = [
31
+ { id: 1, label: 'a', amount: 3.14 },
32
+ { id: 2, label: 'b', amount: 4.54 }
33
+ ];
34
+ expect(items.sum('amount')).toBe(7.68);
35
+ });
36
+
37
+ test('Tests for max / min numbers', () => {
38
+ const items = [12, 8, 22];
39
+ expect(items.max()).toBe(22);
40
+ expect(items.min()).toBe(8);
41
+ });
42
+
43
+ test('Tests for max / min fields', () => {
44
+ const items = [
45
+ { id: 1, label: 'a', amount: 3.14 },
46
+ { id: 2, label: 'b', amount: 4.54 },
47
+ { id: 2, label: 'b', amount: 1.52 }
48
+ ];
49
+ expect(items.max('amount')).toBe(4.54);
50
+ expect(items.min('amount')).toBe(1.52);
51
+ });
@@ -1,3 +1,4 @@
1
+ import { DataTypes } from './DataTypes';
1
2
  declare global {
2
3
  interface Array<T> {
3
4
  /**
@@ -6,6 +7,21 @@ declare global {
6
7
  * @param round A round for both matches
7
8
  */
8
9
  different(target: Array<T>, round?: boolean): Array<T>;
10
+ /**
11
+ * Get max number item or number item property
12
+ * @param field Object field to calculate
13
+ */
14
+ max(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
15
+ /**
16
+ * Get min number item or number item property
17
+ * @param field Object field to calculate
18
+ */
19
+ min(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
20
+ /**
21
+ * Sum number items or number item properties
22
+ * @param field Object field to calculate
23
+ */
24
+ sum(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
9
25
  /**
10
26
  * Make all items are unique
11
27
  * @param this Input array
@@ -19,6 +19,24 @@ Array.prototype.toUnique = function () {
19
19
  });
20
20
  return newArray;
21
21
  };
22
+ Array.prototype.max = function (field) {
23
+ if (field == null) {
24
+ return Math.max(...this);
25
+ }
26
+ return Math.max(...this.map((item) => item[field]));
27
+ };
28
+ Array.prototype.min = function (field) {
29
+ if (field == null) {
30
+ return Math.min(...this);
31
+ }
32
+ return Math.min(...this.map((item) => item[field]));
33
+ };
34
+ Array.prototype.sum = function (field) {
35
+ if (field == null) {
36
+ return this.reduce((total, num) => total + num, 0);
37
+ }
38
+ return this.reduce((total, item) => total + item[field], 0);
39
+ };
22
40
  /**
23
41
  * Array Utilities
24
42
  */
@@ -1,3 +1,4 @@
1
+ import { DataTypes } from './DataTypes';
1
2
  declare global {
2
3
  interface Array<T> {
3
4
  /**
@@ -6,6 +7,21 @@ declare global {
6
7
  * @param round A round for both matches
7
8
  */
8
9
  different(target: Array<T>, round?: boolean): Array<T>;
10
+ /**
11
+ * Get max number item or number item property
12
+ * @param field Object field to calculate
13
+ */
14
+ max(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
15
+ /**
16
+ * Get min number item or number item property
17
+ * @param field Object field to calculate
18
+ */
19
+ min(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
20
+ /**
21
+ * Sum number items or number item properties
22
+ * @param field Object field to calculate
23
+ */
24
+ sum(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
9
25
  /**
10
26
  * Make all items are unique
11
27
  * @param this Input array
@@ -13,6 +13,24 @@ Array.prototype.toUnique = function () {
13
13
  });
14
14
  return newArray;
15
15
  };
16
+ Array.prototype.max = function (field) {
17
+ if (field == null) {
18
+ return Math.max(...this);
19
+ }
20
+ return Math.max(...this.map((item) => item[field]));
21
+ };
22
+ Array.prototype.min = function (field) {
23
+ if (field == null) {
24
+ return Math.min(...this);
25
+ }
26
+ return Math.min(...this.map((item) => item[field]));
27
+ };
28
+ Array.prototype.sum = function (field) {
29
+ if (field == null) {
30
+ return this.reduce((total, num) => total + num, 0);
31
+ }
32
+ return this.reduce((total, item) => total + item[field], 0);
33
+ };
16
34
  /**
17
35
  * Array Utilities
18
36
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etsoo/shared",
3
- "version": "1.1.96",
3
+ "version": "1.1.98",
4
4
  "description": "TypeScript shared utilities and functions",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/mjs/index.js",
package/src/ArrayUtils.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import isEqual from 'lodash.isequal';
2
+ import { DataTypes } from './DataTypes';
2
3
 
3
4
  declare global {
4
5
  interface Array<T> {
@@ -9,6 +10,42 @@ declare global {
9
10
  */
10
11
  different(target: Array<T>, round?: boolean): Array<T>;
11
12
 
13
+ /**
14
+ * Get max number item or number item property
15
+ * @param field Object field to calculate
16
+ */
17
+ max(
18
+ ...field: T extends number
19
+ ? [undefined?]
20
+ : T extends object
21
+ ? [DataTypes.Keys<T, number>]
22
+ : [never]
23
+ ): number;
24
+
25
+ /**
26
+ * Get min number item or number item property
27
+ * @param field Object field to calculate
28
+ */
29
+ min(
30
+ ...field: T extends number
31
+ ? [undefined?]
32
+ : T extends object
33
+ ? [DataTypes.Keys<T, number>]
34
+ : [never]
35
+ ): number;
36
+
37
+ /**
38
+ * Sum number items or number item properties
39
+ * @param field Object field to calculate
40
+ */
41
+ sum(
42
+ ...field: T extends number
43
+ ? [undefined?]
44
+ : T extends object
45
+ ? [DataTypes.Keys<T, number>]
46
+ : [never]
47
+ ): number;
48
+
12
49
  /**
13
50
  * Make all items are unique
14
51
  * @param this Input array
@@ -37,6 +74,39 @@ Array.prototype.toUnique = function <T>(this: Array<T>) {
37
74
  return newArray;
38
75
  };
39
76
 
77
+ Array.prototype.max = function <T>(
78
+ this: Array<T>,
79
+ field: T extends object ? DataTypes.Keys<T, number> : undefined
80
+ ) {
81
+ if (field == null) {
82
+ return Math.max(...(this as Array<number>));
83
+ }
84
+
85
+ return Math.max(...this.map((item) => item[field] as number));
86
+ };
87
+
88
+ Array.prototype.min = function <T>(
89
+ this: Array<T>,
90
+ field: T extends object ? DataTypes.Keys<T, number> : undefined
91
+ ) {
92
+ if (field == null) {
93
+ return Math.min(...(this as Array<number>));
94
+ }
95
+
96
+ return Math.min(...this.map((item) => item[field] as number));
97
+ };
98
+
99
+ Array.prototype.sum = function <T>(
100
+ this: Array<T>,
101
+ field: T extends object ? DataTypes.Keys<T, number> : undefined
102
+ ) {
103
+ if (field == null) {
104
+ return this.reduce((total, num) => total + (num as number), 0);
105
+ }
106
+
107
+ return this.reduce((total, item) => total + (item[field] as number), 0);
108
+ };
109
+
40
110
  /**
41
111
  * Array Utilities
42
112
  */