@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 +3 -0
- package/__tests__/ArrayUtils.ts +29 -0
- package/lib/cjs/ArrayUtils.d.ts +16 -0
- package/lib/cjs/ArrayUtils.js +18 -0
- package/lib/mjs/ArrayUtils.d.ts +16 -0
- package/lib/mjs/ArrayUtils.js +18 -0
- package/package.json +1 -1
- package/src/ArrayUtils.ts +70 -0
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
|
package/__tests__/ArrayUtils.ts
CHANGED
|
@@ -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
|
+
});
|
package/lib/cjs/ArrayUtils.d.ts
CHANGED
|
@@ -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
|
package/lib/cjs/ArrayUtils.js
CHANGED
|
@@ -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
|
*/
|
package/lib/mjs/ArrayUtils.d.ts
CHANGED
|
@@ -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
|
package/lib/mjs/ArrayUtils.js
CHANGED
|
@@ -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
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
|
*/
|