jz-toolkit 1.1.0 → 1.1.2
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 +5 -1
- package/dist/array/access.d.ts +41 -0
- package/dist/array/access.d.ts.map +1 -0
- package/dist/array/access.js +55 -0
- package/dist/array/flatten.d.ts +22 -0
- package/dist/array/flatten.d.ts.map +1 -0
- package/dist/array/flatten.js +41 -0
- package/dist/array/groupBy.d.ts +15 -0
- package/dist/array/groupBy.d.ts.map +1 -0
- package/dist/array/groupBy.js +29 -0
- package/dist/array/index.d.ts +6 -0
- package/dist/array/index.d.ts.map +1 -1
- package/dist/array/index.js +6 -0
- package/dist/array/set-operations.d.ts +30 -0
- package/dist/array/set-operations.d.ts.map +1 -0
- package/dist/array/set-operations.js +43 -0
- package/dist/array/sortBy.d.ts +15 -0
- package/dist/array/sortBy.d.ts.map +1 -0
- package/dist/array/sortBy.js +28 -0
- package/dist/array/uniq.d.ts +21 -0
- package/dist/array/uniq.d.ts.map +1 -0
- package/dist/array/uniq.js +37 -0
- package/dist/async/index.d.ts +37 -0
- package/dist/async/index.d.ts.map +1 -0
- package/dist/async/index.js +92 -0
- package/dist/date/dateCalc.d.ts +48 -0
- package/dist/date/dateCalc.d.ts.map +1 -0
- package/dist/date/dateCalc.js +77 -0
- package/dist/date/dateCheck.d.ts +39 -0
- package/dist/date/dateCheck.d.ts.map +1 -0
- package/dist/date/dateCheck.js +70 -0
- package/dist/date/formatDate.d.ts +13 -0
- package/dist/date/formatDate.d.ts.map +1 -0
- package/dist/date/formatDate.js +34 -0
- package/dist/date/index.d.ts +4 -0
- package/dist/date/index.d.ts.map +1 -0
- package/dist/date/index.js +19 -0
- package/dist/esm/array/access.d.ts +41 -0
- package/dist/esm/array/access.d.ts.map +1 -0
- package/dist/esm/array/access.js +48 -0
- package/dist/esm/array/flatten.d.ts +22 -0
- package/dist/esm/array/flatten.d.ts.map +1 -0
- package/dist/esm/array/flatten.js +36 -0
- package/dist/esm/array/groupBy.d.ts +15 -0
- package/dist/esm/array/groupBy.d.ts.map +1 -0
- package/dist/esm/array/groupBy.js +25 -0
- package/dist/esm/array/index.d.ts +6 -0
- package/dist/esm/array/index.d.ts.map +1 -1
- package/dist/esm/array/index.js +6 -0
- package/dist/esm/array/set-operations.d.ts +30 -0
- package/dist/esm/array/set-operations.d.ts.map +1 -0
- package/dist/esm/array/set-operations.js +37 -0
- package/dist/esm/array/sortBy.d.ts +15 -0
- package/dist/esm/array/sortBy.d.ts.map +1 -0
- package/dist/esm/array/sortBy.js +24 -0
- package/dist/esm/array/uniq.d.ts +21 -0
- package/dist/esm/array/uniq.d.ts.map +1 -0
- package/dist/esm/array/uniq.js +32 -0
- package/dist/esm/async/index.d.ts +37 -0
- package/dist/esm/async/index.d.ts.map +1 -0
- package/dist/esm/async/index.js +86 -0
- package/dist/esm/date/dateCalc.d.ts +48 -0
- package/dist/esm/date/dateCalc.d.ts.map +1 -0
- package/dist/esm/date/dateCalc.js +68 -0
- package/dist/esm/date/dateCheck.d.ts +39 -0
- package/dist/esm/date/dateCheck.d.ts.map +1 -0
- package/dist/esm/date/dateCheck.js +61 -0
- package/dist/esm/date/formatDate.d.ts +13 -0
- package/dist/esm/date/formatDate.d.ts.map +1 -0
- package/dist/esm/date/formatDate.js +30 -0
- package/dist/esm/date/index.d.ts +4 -0
- package/dist/esm/date/index.d.ts.map +1 -0
- package/dist/esm/date/index.js +3 -0
- package/dist/esm/function/debounce.d.ts +13 -0
- package/dist/esm/function/debounce.d.ts.map +1 -0
- package/dist/esm/function/debounce.js +31 -0
- package/dist/esm/function/index.d.ts +5 -0
- package/dist/esm/function/index.d.ts.map +1 -0
- package/dist/esm/function/index.js +4 -0
- package/dist/esm/function/once.d.ts +12 -0
- package/dist/esm/function/once.d.ts.map +1 -0
- package/dist/esm/function/once.js +22 -0
- package/dist/esm/function/sleep.d.ts +15 -0
- package/dist/esm/function/sleep.d.ts.map +1 -0
- package/dist/esm/function/sleep.js +16 -0
- package/dist/esm/function/throttle.d.ts +16 -0
- package/dist/esm/function/throttle.d.ts.map +1 -0
- package/dist/esm/function/throttle.js +39 -0
- package/dist/esm/index.d.ts +15 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +25 -5
- package/dist/esm/number/index.d.ts +3 -0
- package/dist/esm/number/index.d.ts.map +1 -1
- package/dist/esm/number/index.js +3 -0
- package/dist/esm/number/math.d.ts +40 -0
- package/dist/esm/number/math.d.ts.map +1 -0
- package/dist/esm/number/math.js +55 -0
- package/dist/esm/number/random.d.ts +23 -0
- package/dist/esm/number/random.d.ts.map +1 -0
- package/dist/esm/number/random.js +27 -0
- package/dist/esm/number/range.d.ts +27 -0
- package/dist/esm/number/range.d.ts.map +1 -0
- package/dist/esm/number/range.js +30 -0
- package/dist/esm/object/deepClone.d.ts +13 -0
- package/dist/esm/object/deepClone.d.ts.map +1 -0
- package/dist/esm/object/deepClone.js +53 -0
- package/dist/esm/object/flattenObject.d.ts +27 -0
- package/dist/esm/object/flattenObject.d.ts.map +1 -0
- package/dist/esm/object/flattenObject.js +62 -0
- package/dist/esm/object/get.d.ts +15 -0
- package/dist/esm/object/get.d.ts.map +1 -0
- package/dist/esm/object/get.js +28 -0
- package/dist/esm/object/index.d.ts +5 -0
- package/dist/esm/object/index.d.ts.map +1 -1
- package/dist/esm/object/index.js +5 -0
- package/dist/esm/object/merge.d.ts +12 -0
- package/dist/esm/object/merge.d.ts.map +1 -0
- package/dist/esm/object/merge.js +34 -0
- package/dist/esm/object/set.d.ts +14 -0
- package/dist/esm/object/set.d.ts.map +1 -0
- package/dist/esm/object/set.js +32 -0
- package/dist/esm/string/index.d.ts +6 -0
- package/dist/esm/string/index.d.ts.map +1 -1
- package/dist/esm/string/index.js +6 -0
- package/dist/esm/string/kebabCase.d.ts +12 -0
- package/dist/esm/string/kebabCase.d.ts.map +1 -0
- package/dist/esm/string/kebabCase.js +16 -0
- package/dist/esm/string/pascalCase.d.ts +12 -0
- package/dist/esm/string/pascalCase.d.ts.map +1 -0
- package/dist/esm/string/pascalCase.js +15 -0
- package/dist/esm/string/randomString.d.ts +21 -0
- package/dist/esm/string/randomString.d.ts.map +1 -0
- package/dist/esm/string/randomString.js +34 -0
- package/dist/esm/string/snakeCase.d.ts +12 -0
- package/dist/esm/string/snakeCase.d.ts.map +1 -0
- package/dist/esm/string/snakeCase.js +16 -0
- package/dist/esm/string/trim.d.ts +21 -0
- package/dist/esm/string/trim.d.ts.map +1 -0
- package/dist/esm/string/trim.js +42 -0
- package/dist/esm/string/truncate.d.ts +13 -0
- package/dist/esm/string/truncate.d.ts.map +1 -0
- package/dist/esm/string/truncate.js +18 -0
- package/dist/esm/url/index.d.ts +42 -0
- package/dist/esm/url/index.d.ts.map +1 -0
- package/dist/esm/url/index.js +77 -0
- package/dist/esm/utility/index.d.ts +1 -0
- package/dist/esm/utility/index.d.ts.map +1 -1
- package/dist/esm/utility/index.js +1 -0
- package/dist/esm/utility/isType.d.ts +149 -1
- package/dist/esm/utility/isType.d.ts.map +1 -1
- package/dist/esm/utility/isType.js +158 -6
- package/dist/esm/utility/uuid.d.ts +26 -0
- package/dist/esm/utility/uuid.d.ts.map +1 -0
- package/dist/esm/utility/uuid.js +40 -0
- package/dist/esm/validate/index.d.ts +58 -0
- package/dist/esm/validate/index.d.ts.map +1 -0
- package/dist/esm/validate/index.js +94 -0
- package/dist/function/debounce.d.ts +13 -0
- package/dist/function/debounce.d.ts.map +1 -0
- package/dist/function/debounce.js +35 -0
- package/dist/function/index.d.ts +5 -0
- package/dist/function/index.d.ts.map +1 -0
- package/dist/function/index.js +20 -0
- package/dist/function/once.d.ts +12 -0
- package/dist/function/once.d.ts.map +1 -0
- package/dist/function/once.js +26 -0
- package/dist/function/sleep.d.ts +15 -0
- package/dist/function/sleep.d.ts.map +1 -0
- package/dist/function/sleep.js +20 -0
- package/dist/function/throttle.d.ts +16 -0
- package/dist/function/throttle.d.ts.map +1 -0
- package/dist/function/throttle.js +43 -0
- package/dist/index.d.ts +15 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +94 -1
- package/dist/number/index.d.ts +3 -0
- package/dist/number/index.d.ts.map +1 -1
- package/dist/number/index.js +3 -0
- package/dist/number/math.d.ts +40 -0
- package/dist/number/math.d.ts.map +1 -0
- package/dist/number/math.js +63 -0
- package/dist/number/random.d.ts +23 -0
- package/dist/number/random.d.ts.map +1 -0
- package/dist/number/random.js +32 -0
- package/dist/number/range.d.ts +27 -0
- package/dist/number/range.d.ts.map +1 -0
- package/dist/number/range.js +35 -0
- package/dist/object/deepClone.d.ts +13 -0
- package/dist/object/deepClone.d.ts.map +1 -0
- package/dist/object/deepClone.js +57 -0
- package/dist/object/flattenObject.d.ts +27 -0
- package/dist/object/flattenObject.d.ts.map +1 -0
- package/dist/object/flattenObject.js +67 -0
- package/dist/object/get.d.ts +15 -0
- package/dist/object/get.d.ts.map +1 -0
- package/dist/object/get.js +32 -0
- package/dist/object/index.d.ts +5 -0
- package/dist/object/index.d.ts.map +1 -1
- package/dist/object/index.js +5 -0
- package/dist/object/merge.d.ts +12 -0
- package/dist/object/merge.d.ts.map +1 -0
- package/dist/object/merge.js +38 -0
- package/dist/object/set.d.ts +14 -0
- package/dist/object/set.d.ts.map +1 -0
- package/dist/object/set.js +36 -0
- package/dist/string/index.d.ts +6 -0
- package/dist/string/index.d.ts.map +1 -1
- package/dist/string/index.js +6 -0
- package/dist/string/kebabCase.d.ts +12 -0
- package/dist/string/kebabCase.d.ts.map +1 -0
- package/dist/string/kebabCase.js +20 -0
- package/dist/string/pascalCase.d.ts +12 -0
- package/dist/string/pascalCase.d.ts.map +1 -0
- package/dist/string/pascalCase.js +19 -0
- package/dist/string/randomString.d.ts +21 -0
- package/dist/string/randomString.d.ts.map +1 -0
- package/dist/string/randomString.js +40 -0
- package/dist/string/snakeCase.d.ts +12 -0
- package/dist/string/snakeCase.d.ts.map +1 -0
- package/dist/string/snakeCase.js +20 -0
- package/dist/string/trim.d.ts +21 -0
- package/dist/string/trim.d.ts.map +1 -0
- package/dist/string/trim.js +48 -0
- package/dist/string/truncate.d.ts +13 -0
- package/dist/string/truncate.d.ts.map +1 -0
- package/dist/string/truncate.js +22 -0
- package/dist/url/index.d.ts +42 -0
- package/dist/url/index.d.ts.map +1 -0
- package/dist/url/index.js +84 -0
- package/dist/utility/index.d.ts +1 -0
- package/dist/utility/index.d.ts.map +1 -1
- package/dist/utility/index.js +1 -0
- package/dist/utility/isType.d.ts +149 -1
- package/dist/utility/isType.d.ts.map +1 -1
- package/dist/utility/isType.js +161 -7
- package/dist/utility/uuid.d.ts +26 -0
- package/dist/utility/uuid.d.ts.map +1 -0
- package/dist/utility/uuid.js +46 -0
- package/dist/validate/index.d.ts +58 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +105 -0
- package/package.json +21 -1
package/README.md
CHANGED
|
@@ -20,12 +20,16 @@
|
|
|
20
20
|
npm i jz-toolkit
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
## 官方文档地址
|
|
23
|
+
## 官方文档地址 - 更多Api在文档查阅
|
|
24
24
|
|
|
25
25
|
http://172.81.245.148:8098/api/utils.html
|
|
26
26
|
|
|
27
27
|
## 快速开始
|
|
28
28
|
|
|
29
|
+
## 聊天群
|
|
30
|
+
|
|
31
|
+
<img src="./assets/2871763863632_.pic.jpg" alt="聊天群" width="200">
|
|
32
|
+
|
|
29
33
|
### 完整导入
|
|
30
34
|
|
|
31
35
|
```typescript
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 获取数组的第一个元素
|
|
3
|
+
* @param array 输入数组
|
|
4
|
+
* @returns 第一个元素,如果数组为空则返回undefined
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* first([1, 2, 3]) // => 1
|
|
8
|
+
* first([]) // => undefined
|
|
9
|
+
*/
|
|
10
|
+
export declare function first<T>(array: T[]): T | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* 获取数组的最后一个元素
|
|
13
|
+
* @param array 输入数组
|
|
14
|
+
* @returns 最后一个元素,如果数组为空则返回undefined
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* last([1, 2, 3]) // => 3
|
|
18
|
+
* last([]) // => undefined
|
|
19
|
+
*/
|
|
20
|
+
export declare function last<T>(array: T[]): T | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* 获取数组的前n个元素
|
|
23
|
+
* @param array 输入数组
|
|
24
|
+
* @param n 要获取的元素数量
|
|
25
|
+
* @returns 前n个元素组成的数组
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* take([1, 2, 3, 4], 2) // => [1, 2]
|
|
29
|
+
*/
|
|
30
|
+
export declare function take<T>(array: T[], n?: number): T[];
|
|
31
|
+
/**
|
|
32
|
+
* 获取数组的后n个元素
|
|
33
|
+
* @param array 输入数组
|
|
34
|
+
* @param n 要获取的元素数量
|
|
35
|
+
* @returns 后n个元素组成的数组
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* takeRight([1, 2, 3, 4], 2) // => [3, 4]
|
|
39
|
+
*/
|
|
40
|
+
export declare function takeRight<T>(array: T[], n?: number): T[];
|
|
41
|
+
//# sourceMappingURL=access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/array/access.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAElD;AAED;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAEjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAE,MAAU,GAAG,CAAC,EAAE,CAEtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAE,MAAU,GAAG,CAAC,EAAE,CAE3D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.takeRight = exports.take = exports.last = exports.first = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 获取数组的第一个元素
|
|
6
|
+
* @param array 输入数组
|
|
7
|
+
* @returns 第一个元素,如果数组为空则返回undefined
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* first([1, 2, 3]) // => 1
|
|
11
|
+
* first([]) // => undefined
|
|
12
|
+
*/
|
|
13
|
+
function first(array) {
|
|
14
|
+
return array[0];
|
|
15
|
+
}
|
|
16
|
+
exports.first = first;
|
|
17
|
+
/**
|
|
18
|
+
* 获取数组的最后一个元素
|
|
19
|
+
* @param array 输入数组
|
|
20
|
+
* @returns 最后一个元素,如果数组为空则返回undefined
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* last([1, 2, 3]) // => 3
|
|
24
|
+
* last([]) // => undefined
|
|
25
|
+
*/
|
|
26
|
+
function last(array) {
|
|
27
|
+
return array[array.length - 1];
|
|
28
|
+
}
|
|
29
|
+
exports.last = last;
|
|
30
|
+
/**
|
|
31
|
+
* 获取数组的前n个元素
|
|
32
|
+
* @param array 输入数组
|
|
33
|
+
* @param n 要获取的元素数量
|
|
34
|
+
* @returns 前n个元素组成的数组
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* take([1, 2, 3, 4], 2) // => [1, 2]
|
|
38
|
+
*/
|
|
39
|
+
function take(array, n = 1) {
|
|
40
|
+
return array.slice(0, n);
|
|
41
|
+
}
|
|
42
|
+
exports.take = take;
|
|
43
|
+
/**
|
|
44
|
+
* 获取数组的后n个元素
|
|
45
|
+
* @param array 输入数组
|
|
46
|
+
* @param n 要获取的元素数量
|
|
47
|
+
* @returns 后n个元素组成的数组
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* takeRight([1, 2, 3, 4], 2) // => [3, 4]
|
|
51
|
+
*/
|
|
52
|
+
function takeRight(array, n = 1) {
|
|
53
|
+
return n === 0 ? [] : array.slice(-n);
|
|
54
|
+
}
|
|
55
|
+
exports.takeRight = takeRight;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数组扁平化
|
|
3
|
+
* @param array 输入数组
|
|
4
|
+
* @param depth 扁平化深度,默认为1
|
|
5
|
+
* @returns 扁平化后的数组
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* flatten([1, [2, [3, [4]], 5]]) // => [1, 2, [3, [4]], 5]
|
|
9
|
+
* flatten([1, [2, [3, [4]], 5]], 2) // => [1, 2, 3, [4], 5]
|
|
10
|
+
* flatten([1, [2, [3, [4]], 5]], Infinity) // => [1, 2, 3, 4, 5]
|
|
11
|
+
*/
|
|
12
|
+
export declare function flatten<T>(array: any[], depth?: number): T[];
|
|
13
|
+
/**
|
|
14
|
+
* 深度扁平化数组(扁平化所有层级)
|
|
15
|
+
* @param array 输入数组
|
|
16
|
+
* @returns 完全扁平化后的数组
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* flattenDeep([1, [2, [3, [4]], 5]]) // => [1, 2, 3, 4, 5]
|
|
20
|
+
*/
|
|
21
|
+
export declare function flattenDeep<T>(array: any[]): T[];
|
|
22
|
+
//# sourceMappingURL=flatten.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../src/array/flatten.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,GAAE,MAAU,GAAG,CAAC,EAAE,CAa/D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAEhD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.flattenDeep = exports.flatten = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 数组扁平化
|
|
6
|
+
* @param array 输入数组
|
|
7
|
+
* @param depth 扁平化深度,默认为1
|
|
8
|
+
* @returns 扁平化后的数组
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* flatten([1, [2, [3, [4]], 5]]) // => [1, 2, [3, [4]], 5]
|
|
12
|
+
* flatten([1, [2, [3, [4]], 5]], 2) // => [1, 2, 3, [4], 5]
|
|
13
|
+
* flatten([1, [2, [3, [4]], 5]], Infinity) // => [1, 2, 3, 4, 5]
|
|
14
|
+
*/
|
|
15
|
+
function flatten(array, depth = 1) {
|
|
16
|
+
if (depth <= 0) {
|
|
17
|
+
return array.slice();
|
|
18
|
+
}
|
|
19
|
+
return array.reduce((acc, val) => {
|
|
20
|
+
if (Array.isArray(val)) {
|
|
21
|
+
acc.push(...flatten(val, depth - 1));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
acc.push(val);
|
|
25
|
+
}
|
|
26
|
+
return acc;
|
|
27
|
+
}, []);
|
|
28
|
+
}
|
|
29
|
+
exports.flatten = flatten;
|
|
30
|
+
/**
|
|
31
|
+
* 深度扁平化数组(扁平化所有层级)
|
|
32
|
+
* @param array 输入数组
|
|
33
|
+
* @returns 完全扁平化后的数组
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* flattenDeep([1, [2, [3, [4]], 5]]) // => [1, 2, 3, 4, 5]
|
|
37
|
+
*/
|
|
38
|
+
function flattenDeep(array) {
|
|
39
|
+
return flatten(array, Infinity);
|
|
40
|
+
}
|
|
41
|
+
exports.flattenDeep = flattenDeep;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 按指定属性或函数对数组进行分组
|
|
3
|
+
* @param array 输入数组
|
|
4
|
+
* @param iteratee 分组依据:属性名或函数
|
|
5
|
+
* @returns 分组后的对象
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* groupBy([{type: 'a', val: 1}, {type: 'b', val: 2}, {type: 'a', val: 3}], 'type')
|
|
9
|
+
* // => {a: [{type: 'a', val: 1}, {type: 'a', val: 3}], b: [{type: 'b', val: 2}]}
|
|
10
|
+
*
|
|
11
|
+
* groupBy([1.3, 2.1, 2.4], num => Math.floor(num))
|
|
12
|
+
* // => {1: [1.3], 2: [2.1, 2.4]}
|
|
13
|
+
*/
|
|
14
|
+
export declare function groupBy<T>(array: T[], iteratee: keyof T | ((item: T) => string | number)): Record<string, T[]>;
|
|
15
|
+
//# sourceMappingURL=groupBy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupBy.d.ts","sourceRoot":"","sources":["../../src/array/groupBy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,KAAK,EAAE,CAAC,EAAE,EACV,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC,GACjD,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAarB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.groupBy = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 按指定属性或函数对数组进行分组
|
|
6
|
+
* @param array 输入数组
|
|
7
|
+
* @param iteratee 分组依据:属性名或函数
|
|
8
|
+
* @returns 分组后的对象
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* groupBy([{type: 'a', val: 1}, {type: 'b', val: 2}, {type: 'a', val: 3}], 'type')
|
|
12
|
+
* // => {a: [{type: 'a', val: 1}, {type: 'a', val: 3}], b: [{type: 'b', val: 2}]}
|
|
13
|
+
*
|
|
14
|
+
* groupBy([1.3, 2.1, 2.4], num => Math.floor(num))
|
|
15
|
+
* // => {1: [1.3], 2: [2.1, 2.4]}
|
|
16
|
+
*/
|
|
17
|
+
function groupBy(array, iteratee) {
|
|
18
|
+
return array.reduce((result, item) => {
|
|
19
|
+
const key = typeof iteratee === "function"
|
|
20
|
+
? String(iteratee(item))
|
|
21
|
+
: String(item[iteratee]);
|
|
22
|
+
if (!result[key]) {
|
|
23
|
+
result[key] = [];
|
|
24
|
+
}
|
|
25
|
+
result[key].push(item);
|
|
26
|
+
return result;
|
|
27
|
+
}, {});
|
|
28
|
+
}
|
|
29
|
+
exports.groupBy = groupBy;
|
package/dist/array/index.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export * from "./chunk";
|
|
2
2
|
export * from "./compact";
|
|
3
3
|
export * from "./filterDuplicateValues";
|
|
4
|
+
export * from "./uniq";
|
|
5
|
+
export * from "./flatten";
|
|
6
|
+
export * from "./groupBy";
|
|
7
|
+
export * from "./sortBy";
|
|
8
|
+
export * from "./set-operations";
|
|
9
|
+
export * from "./access";
|
|
4
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/array/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/array/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC"}
|
package/dist/array/index.js
CHANGED
|
@@ -17,3 +17,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./chunk"), exports);
|
|
18
18
|
__exportStar(require("./compact"), exports);
|
|
19
19
|
__exportStar(require("./filterDuplicateValues"), exports);
|
|
20
|
+
__exportStar(require("./uniq"), exports);
|
|
21
|
+
__exportStar(require("./flatten"), exports);
|
|
22
|
+
__exportStar(require("./groupBy"), exports);
|
|
23
|
+
__exportStar(require("./sortBy"), exports);
|
|
24
|
+
__exportStar(require("./set-operations"), exports);
|
|
25
|
+
__exportStar(require("./access"), exports);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 返回两个数组的交集
|
|
3
|
+
* @param arr1 第一个数组
|
|
4
|
+
* @param arr2 第二个数组
|
|
5
|
+
* @returns 交集数组
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* intersection([1, 2, 3], [2, 3, 4]) // => [2, 3]
|
|
9
|
+
*/
|
|
10
|
+
export declare function intersection<T>(arr1: T[], arr2: T[]): T[];
|
|
11
|
+
/**
|
|
12
|
+
* 返回第一个数组与第二个数组的差集
|
|
13
|
+
* @param arr1 第一个数组
|
|
14
|
+
* @param arr2 第二个数组
|
|
15
|
+
* @returns 差集数组(arr1中有但arr2中没有的元素)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* difference([1, 2, 3], [2, 3, 4]) // => [1]
|
|
19
|
+
*/
|
|
20
|
+
export declare function difference<T>(arr1: T[], arr2: T[]): T[];
|
|
21
|
+
/**
|
|
22
|
+
* 返回多个数组的并集
|
|
23
|
+
* @param arrays 多个数组
|
|
24
|
+
* @returns 并集数组
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* union([1, 2], [2, 3], [3, 4]) // => [1, 2, 3, 4]
|
|
28
|
+
*/
|
|
29
|
+
export declare function union<T>(...arrays: T[][]): T[];
|
|
30
|
+
//# sourceMappingURL=set-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-operations.d.ts","sourceRoot":"","sources":["../../src/array/set-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAGzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAGvD;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAE9C"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.union = exports.difference = exports.intersection = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 返回两个数组的交集
|
|
6
|
+
* @param arr1 第一个数组
|
|
7
|
+
* @param arr2 第二个数组
|
|
8
|
+
* @returns 交集数组
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* intersection([1, 2, 3], [2, 3, 4]) // => [2, 3]
|
|
12
|
+
*/
|
|
13
|
+
function intersection(arr1, arr2) {
|
|
14
|
+
const set2 = new Set(arr2);
|
|
15
|
+
return arr1.filter((item) => set2.has(item));
|
|
16
|
+
}
|
|
17
|
+
exports.intersection = intersection;
|
|
18
|
+
/**
|
|
19
|
+
* 返回第一个数组与第二个数组的差集
|
|
20
|
+
* @param arr1 第一个数组
|
|
21
|
+
* @param arr2 第二个数组
|
|
22
|
+
* @returns 差集数组(arr1中有但arr2中没有的元素)
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* difference([1, 2, 3], [2, 3, 4]) // => [1]
|
|
26
|
+
*/
|
|
27
|
+
function difference(arr1, arr2) {
|
|
28
|
+
const set2 = new Set(arr2);
|
|
29
|
+
return arr1.filter((item) => !set2.has(item));
|
|
30
|
+
}
|
|
31
|
+
exports.difference = difference;
|
|
32
|
+
/**
|
|
33
|
+
* 返回多个数组的并集
|
|
34
|
+
* @param arrays 多个数组
|
|
35
|
+
* @returns 并集数组
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* union([1, 2], [2, 3], [3, 4]) // => [1, 2, 3, 4]
|
|
39
|
+
*/
|
|
40
|
+
function union(...arrays) {
|
|
41
|
+
return Array.from(new Set(arrays.flat()));
|
|
42
|
+
}
|
|
43
|
+
exports.union = union;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 按指定属性或函数对数组进行排序
|
|
3
|
+
* @param array 输入数组
|
|
4
|
+
* @param iteratee 排序依据:属性名或函数
|
|
5
|
+
* @returns 排序后的新数组
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* sortBy([{name: 'john', age: 30}, {name: 'jane', age: 25}], 'age')
|
|
9
|
+
* // => [{name: 'jane', age: 25}, {name: 'john', age: 30}]
|
|
10
|
+
*
|
|
11
|
+
* sortBy([3, 1, 2], num => num)
|
|
12
|
+
* // => [1, 2, 3]
|
|
13
|
+
*/
|
|
14
|
+
export declare function sortBy<T>(array: T[], iteratee: keyof T | ((item: T) => any)): T[];
|
|
15
|
+
//# sourceMappingURL=sortBy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortBy.d.ts","sourceRoot":"","sources":["../../src/array/sortBy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,KAAK,EAAE,CAAC,EAAE,EACV,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,GACrC,CAAC,EAAE,CASL"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sortBy = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 按指定属性或函数对数组进行排序
|
|
6
|
+
* @param array 输入数组
|
|
7
|
+
* @param iteratee 排序依据:属性名或函数
|
|
8
|
+
* @returns 排序后的新数组
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* sortBy([{name: 'john', age: 30}, {name: 'jane', age: 25}], 'age')
|
|
12
|
+
* // => [{name: 'jane', age: 25}, {name: 'john', age: 30}]
|
|
13
|
+
*
|
|
14
|
+
* sortBy([3, 1, 2], num => num)
|
|
15
|
+
* // => [1, 2, 3]
|
|
16
|
+
*/
|
|
17
|
+
function sortBy(array, iteratee) {
|
|
18
|
+
return [...array].sort((a, b) => {
|
|
19
|
+
const aVal = typeof iteratee === "function" ? iteratee(a) : a[iteratee];
|
|
20
|
+
const bVal = typeof iteratee === "function" ? iteratee(b) : b[iteratee];
|
|
21
|
+
if (aVal < bVal)
|
|
22
|
+
return -1;
|
|
23
|
+
if (aVal > bVal)
|
|
24
|
+
return 1;
|
|
25
|
+
return 0;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
exports.sortBy = sortBy;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数组去重
|
|
3
|
+
* @param array 输入数组
|
|
4
|
+
* @returns 去重后的数组
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* uniq([1, 2, 2, 3, 4, 4, 5]) // => [1, 2, 3, 4, 5]
|
|
8
|
+
* uniq(['a', 'b', 'a', 'c']) // => ['a', 'b', 'c']
|
|
9
|
+
*/
|
|
10
|
+
export declare function uniq<T>(array: T[]): T[];
|
|
11
|
+
/**
|
|
12
|
+
* 根据迭代器函数进行去重
|
|
13
|
+
* @param array 输入数组
|
|
14
|
+
* @param iteratee 迭代器函数
|
|
15
|
+
* @returns 去重后的数组
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* uniqBy([{id: 1}, {id: 2}, {id: 1}], item => item.id) // => [{id: 1}, {id: 2}]
|
|
19
|
+
*/
|
|
20
|
+
export declare function uniqBy<T>(array: T[], iteratee: (item: T) => any): T[];
|
|
21
|
+
//# sourceMappingURL=uniq.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniq.d.ts","sourceRoot":"","sources":["../../src/array/uniq.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAUrE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uniqBy = exports.uniq = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 数组去重
|
|
6
|
+
* @param array 输入数组
|
|
7
|
+
* @returns 去重后的数组
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* uniq([1, 2, 2, 3, 4, 4, 5]) // => [1, 2, 3, 4, 5]
|
|
11
|
+
* uniq(['a', 'b', 'a', 'c']) // => ['a', 'b', 'c']
|
|
12
|
+
*/
|
|
13
|
+
function uniq(array) {
|
|
14
|
+
return Array.from(new Set(array));
|
|
15
|
+
}
|
|
16
|
+
exports.uniq = uniq;
|
|
17
|
+
/**
|
|
18
|
+
* 根据迭代器函数进行去重
|
|
19
|
+
* @param array 输入数组
|
|
20
|
+
* @param iteratee 迭代器函数
|
|
21
|
+
* @returns 去重后的数组
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* uniqBy([{id: 1}, {id: 2}, {id: 1}], item => item.id) // => [{id: 1}, {id: 2}]
|
|
25
|
+
*/
|
|
26
|
+
function uniqBy(array, iteratee) {
|
|
27
|
+
const seen = new Set();
|
|
28
|
+
return array.filter((item) => {
|
|
29
|
+
const key = iteratee(item);
|
|
30
|
+
if (seen.has(key)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
seen.add(key);
|
|
34
|
+
return true;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
exports.uniqBy = uniqBy;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 重试执行异步函数
|
|
3
|
+
* @param fn 要重试的异步函数
|
|
4
|
+
* @param times 重试次数
|
|
5
|
+
* @param interval 重试间隔(毫秒)
|
|
6
|
+
* @returns Promise
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* await retry(() => fetch('/api'), 3, 1000);
|
|
10
|
+
*/
|
|
11
|
+
export declare function retry<T>(fn: () => Promise<T>, times?: number, interval?: number): Promise<T>;
|
|
12
|
+
/**
|
|
13
|
+
* 超时控制
|
|
14
|
+
* @param promise 要执行的Promise
|
|
15
|
+
* @param ms 超时时间(毫秒)
|
|
16
|
+
* @param errorMessage 超时错误信息
|
|
17
|
+
* @returns Promise
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* await timeout(fetch('/api'), 5000, 'Request timeout');
|
|
21
|
+
*/
|
|
22
|
+
export declare function timeout<T>(promise: Promise<T>, ms: number, errorMessage?: string): Promise<T>;
|
|
23
|
+
/**
|
|
24
|
+
* 并发控制的Promise.all
|
|
25
|
+
* @param tasks 任务函数数组
|
|
26
|
+
* @param limit 最大并发数
|
|
27
|
+
* @returns Promise<T[]>
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* const urls = ['/api/1', '/api/2', '/api/3', '/api/4', '/api/5'];
|
|
31
|
+
* const results = await promiseAllWithLimit(
|
|
32
|
+
* urls.map(url => () => fetch(url)),
|
|
33
|
+
* 2 // 最多同时执行2个请求
|
|
34
|
+
* );
|
|
35
|
+
*/
|
|
36
|
+
export declare function promiseAllWithLimit<T>(tasks: (() => Promise<T>)[], limit: number): Promise<T[]>;
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,KAAK,GAAE,MAAU,EACjB,QAAQ,GAAE,MAAa,GACtB,OAAO,CAAC,CAAC,CAAC,CAeZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,EAAE,EAAE,MAAM,EACV,YAAY,GAAE,MAA8B,GAC3C,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,KAAK,EAAE,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAC3B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,EAAE,CAAC,CA4Bd"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.promiseAllWithLimit = exports.timeout = exports.retry = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 重试执行异步函数
|
|
6
|
+
* @param fn 要重试的异步函数
|
|
7
|
+
* @param times 重试次数
|
|
8
|
+
* @param interval 重试间隔(毫秒)
|
|
9
|
+
* @returns Promise
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* await retry(() => fetch('/api'), 3, 1000);
|
|
13
|
+
*/
|
|
14
|
+
async function retry(fn, times = 3, interval = 1000) {
|
|
15
|
+
let lastError = null;
|
|
16
|
+
for (let i = 0; i < times; i++) {
|
|
17
|
+
try {
|
|
18
|
+
return await fn();
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
lastError = error;
|
|
22
|
+
if (i < times - 1 && interval > 0) {
|
|
23
|
+
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
throw lastError || new Error("Retry failed");
|
|
28
|
+
}
|
|
29
|
+
exports.retry = retry;
|
|
30
|
+
/**
|
|
31
|
+
* 超时控制
|
|
32
|
+
* @param promise 要执行的Promise
|
|
33
|
+
* @param ms 超时时间(毫秒)
|
|
34
|
+
* @param errorMessage 超时错误信息
|
|
35
|
+
* @returns Promise
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* await timeout(fetch('/api'), 5000, 'Request timeout');
|
|
39
|
+
*/
|
|
40
|
+
function timeout(promise, ms, errorMessage = "Operation timed out") {
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
const timer = setTimeout(() => {
|
|
43
|
+
reject(new Error(errorMessage));
|
|
44
|
+
}, ms);
|
|
45
|
+
promise
|
|
46
|
+
.then((result) => {
|
|
47
|
+
clearTimeout(timer);
|
|
48
|
+
resolve(result);
|
|
49
|
+
})
|
|
50
|
+
.catch((error) => {
|
|
51
|
+
clearTimeout(timer);
|
|
52
|
+
reject(error);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
exports.timeout = timeout;
|
|
57
|
+
/**
|
|
58
|
+
* 并发控制的Promise.all
|
|
59
|
+
* @param tasks 任务函数数组
|
|
60
|
+
* @param limit 最大并发数
|
|
61
|
+
* @returns Promise<T[]>
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* const urls = ['/api/1', '/api/2', '/api/3', '/api/4', '/api/5'];
|
|
65
|
+
* const results = await promiseAllWithLimit(
|
|
66
|
+
* urls.map(url => () => fetch(url)),
|
|
67
|
+
* 2 // 最多同时执行2个请求
|
|
68
|
+
* );
|
|
69
|
+
*/
|
|
70
|
+
async function promiseAllWithLimit(tasks, limit) {
|
|
71
|
+
const results = [];
|
|
72
|
+
const executing = [];
|
|
73
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
74
|
+
const task = tasks[i];
|
|
75
|
+
const p = task().then((result) => {
|
|
76
|
+
results[i] = result;
|
|
77
|
+
});
|
|
78
|
+
executing.push(p);
|
|
79
|
+
if (executing.length >= limit) {
|
|
80
|
+
await Promise.race(executing);
|
|
81
|
+
// 移除已完成的任务
|
|
82
|
+
const index = executing.findIndex((p) => p.settled ||
|
|
83
|
+
Promise.race([p, Promise.resolve("pending")]) !== "pending");
|
|
84
|
+
if (index !== -1) {
|
|
85
|
+
executing.splice(index, 1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
await Promise.all(executing);
|
|
90
|
+
return results;
|
|
91
|
+
}
|
|
92
|
+
exports.promiseAllWithLimit = promiseAllWithLimit;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 添加天数
|
|
3
|
+
* @param date 日期对象
|
|
4
|
+
* @param days 要添加的天数
|
|
5
|
+
* @returns 新的日期对象
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* addDays(new Date('2024-01-01'), 1) // => 2024-01-02
|
|
9
|
+
* addDays(new Date('2024-01-01'), -1) // => 2023-12-31
|
|
10
|
+
*/
|
|
11
|
+
export declare function addDays(date: Date, days: number): Date;
|
|
12
|
+
/**
|
|
13
|
+
* 添加月份
|
|
14
|
+
* @param date 日期对象
|
|
15
|
+
* @param months 要添加的月份
|
|
16
|
+
* @returns 新的日期对象
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* addMonths(new Date('2024-01-31'), 1) // => 2024-02-29 (leap year)
|
|
20
|
+
* addMonths(new Date('2024-01-01'), -1) // => 2023-12-01
|
|
21
|
+
*/
|
|
22
|
+
export declare function addMonths(date: Date, months: number): Date;
|
|
23
|
+
/**
|
|
24
|
+
* 添加年份
|
|
25
|
+
* @param date 日期对象
|
|
26
|
+
* @param years 要添加的年份
|
|
27
|
+
* @returns 新的日期对象
|
|
28
|
+
*/
|
|
29
|
+
export declare function addYears(date: Date, years: number): Date;
|
|
30
|
+
/**
|
|
31
|
+
* 计算两个日期之间的天数差
|
|
32
|
+
* @param date1 第一个日期
|
|
33
|
+
* @param date2 第二个日期
|
|
34
|
+
* @returns 天数差(date1 - date2)
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* diffDays(new Date('2024-01-10'), new Date('2024-01-01')) // => 9
|
|
38
|
+
*/
|
|
39
|
+
export declare function diffDays(date1: Date, date2: Date): number;
|
|
40
|
+
/**
|
|
41
|
+
* 计算两个日期之间的小时差
|
|
42
|
+
*/
|
|
43
|
+
export declare function diffHours(date1: Date, date2: Date): number;
|
|
44
|
+
/**
|
|
45
|
+
* 计算两个日期之间的分钟差
|
|
46
|
+
*/
|
|
47
|
+
export declare function diffMinutes(date1: Date, date2: Date): number;
|
|
48
|
+
//# sourceMappingURL=dateCalc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateCalc.d.ts","sourceRoot":"","sources":["../../src/date/dateCalc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAItD;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAI1D;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAG1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAG5D"}
|