@etsoo/shared 1.1.97 → 1.1.99

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,10 @@ 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
+ |maxItem|Get max field value item|
107
+ |min|Get min number item or number item property|
108
+ |minItem|Get min field value item|
105
109
  |sum|Sum number items or number item properties|
106
110
  |toUnique|Make all items are unique|
107
111
 
@@ -33,3 +33,32 @@ test('Tests for sum fields', () => {
33
33
  ];
34
34
  expect(items.sum('amount')).toBe(7.68);
35
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: 3, label: 'b', amount: 1.52 }
48
+ ];
49
+ expect(items.max('amount')).toBe(4.54);
50
+ expect(items.min('amount')).toBe(1.52);
51
+ });
52
+
53
+ test('Tests for maxItem / minItem', () => {
54
+ const items = [
55
+ { id: 1, label: 'a', amount: 3.14 },
56
+ { id: 2, label: 'b', amount: 4.54 },
57
+ { id: 3, label: 'b', amount: 1.52 }
58
+ ];
59
+ expect(items.maxItem('amount')?.id).toBe(2);
60
+ expect(items.minItem('amount')?.id).toBe(3);
61
+
62
+ const emptyItems: { id: string; amount: number }[] = [];
63
+ expect(emptyItems.maxItem('amount')).toBeUndefined();
64
+ });
@@ -7,6 +7,26 @@ declare global {
7
7
  * @param round A round for both matches
8
8
  */
9
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 max field value item
17
+ * @param field Object field to calculate
18
+ */
19
+ maxItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined;
20
+ /**
21
+ * Get min number item or number item property
22
+ * @param field Object field to calculate
23
+ */
24
+ min(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
25
+ /**
26
+ * Get min field value item
27
+ * @param field Object field to calculate
28
+ */
29
+ minItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined;
10
30
  /**
11
31
  * Sum number items or number item properties
12
32
  * @param field Object field to calculate
@@ -19,6 +19,28 @@ 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.maxItem = function (field) {
29
+ if (this.length === 0)
30
+ return undefined;
31
+ return this.reduce((prev, curr) => prev[field] > curr[field] ? prev : curr);
32
+ };
33
+ Array.prototype.min = function (field) {
34
+ if (field == null) {
35
+ return Math.min(...this);
36
+ }
37
+ return Math.min(...this.map((item) => item[field]));
38
+ };
39
+ Array.prototype.minItem = function (field) {
40
+ if (this.length === 0)
41
+ return undefined;
42
+ return this.reduce((prev, curr) => prev[field] < curr[field] ? prev : curr);
43
+ };
22
44
  Array.prototype.sum = function (field) {
23
45
  if (field == null) {
24
46
  return this.reduce((total, num) => total + num, 0);
@@ -7,6 +7,26 @@ declare global {
7
7
  * @param round A round for both matches
8
8
  */
9
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 max field value item
17
+ * @param field Object field to calculate
18
+ */
19
+ maxItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined;
20
+ /**
21
+ * Get min number item or number item property
22
+ * @param field Object field to calculate
23
+ */
24
+ min(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
25
+ /**
26
+ * Get min field value item
27
+ * @param field Object field to calculate
28
+ */
29
+ minItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined;
10
30
  /**
11
31
  * Sum number items or number item properties
12
32
  * @param field Object field to calculate
@@ -13,6 +13,28 @@ 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.maxItem = function (field) {
23
+ if (this.length === 0)
24
+ return undefined;
25
+ return this.reduce((prev, curr) => prev[field] > curr[field] ? prev : curr);
26
+ };
27
+ Array.prototype.min = function (field) {
28
+ if (field == null) {
29
+ return Math.min(...this);
30
+ }
31
+ return Math.min(...this.map((item) => item[field]));
32
+ };
33
+ Array.prototype.minItem = function (field) {
34
+ if (this.length === 0)
35
+ return undefined;
36
+ return this.reduce((prev, curr) => prev[field] < curr[field] ? prev : curr);
37
+ };
16
38
  Array.prototype.sum = function (field) {
17
39
  if (field == null) {
18
40
  return this.reduce((total, num) => total + num, 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etsoo/shared",
3
- "version": "1.1.97",
3
+ "version": "1.1.99",
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
@@ -10,6 +10,46 @@ declare global {
10
10
  */
11
11
  different(target: Array<T>, round?: boolean): Array<T>;
12
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 max field value item
27
+ * @param field Object field to calculate
28
+ */
29
+ maxItem(
30
+ field: T extends object ? DataTypes.Keys<T, number> : never
31
+ ): T | undefined;
32
+
33
+ /**
34
+ * Get min number item or number item property
35
+ * @param field Object field to calculate
36
+ */
37
+ min(
38
+ ...field: T extends number
39
+ ? [undefined?]
40
+ : T extends object
41
+ ? [DataTypes.Keys<T, number>]
42
+ : [never]
43
+ ): number;
44
+
45
+ /**
46
+ * Get min field value item
47
+ * @param field Object field to calculate
48
+ */
49
+ minItem(
50
+ field: T extends object ? DataTypes.Keys<T, number> : never
51
+ ): T | undefined;
52
+
13
53
  /**
14
54
  * Sum number items or number item properties
15
55
  * @param field Object field to calculate
@@ -50,6 +90,50 @@ Array.prototype.toUnique = function <T>(this: Array<T>) {
50
90
  return newArray;
51
91
  };
52
92
 
93
+ Array.prototype.max = function <T>(
94
+ this: Array<T>,
95
+ field: T extends object ? DataTypes.Keys<T, number> : undefined
96
+ ) {
97
+ if (field == null) {
98
+ return Math.max(...(this as Array<number>));
99
+ }
100
+
101
+ return Math.max(...this.map((item) => item[field] as number));
102
+ };
103
+
104
+ Array.prototype.maxItem = function <T>(
105
+ this: Array<T>,
106
+ field: T extends object ? DataTypes.Keys<T, number> : never
107
+ ) {
108
+ if (this.length === 0) return undefined;
109
+
110
+ return this.reduce((prev, curr) =>
111
+ prev[field] > curr[field] ? prev : curr
112
+ );
113
+ };
114
+
115
+ Array.prototype.min = function <T>(
116
+ this: Array<T>,
117
+ field: T extends object ? DataTypes.Keys<T, number> : undefined
118
+ ) {
119
+ if (field == null) {
120
+ return Math.min(...(this as Array<number>));
121
+ }
122
+
123
+ return Math.min(...this.map((item) => item[field] as number));
124
+ };
125
+
126
+ Array.prototype.minItem = function <T>(
127
+ this: Array<T>,
128
+ field: T extends object ? DataTypes.Keys<T, number> : never
129
+ ) {
130
+ if (this.length === 0) return undefined;
131
+
132
+ return this.reduce((prev, curr) =>
133
+ prev[field] < curr[field] ? prev : curr
134
+ );
135
+ };
136
+
53
137
  Array.prototype.sum = function <T>(
54
138
  this: Array<T>,
55
139
  field: T extends object ? DataTypes.Keys<T, number> : undefined