wssf-kage-js 1.0.0
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/LICENSE +21 -0
- package/README.md +331 -0
- package/dist/array.d.ts +221 -0
- package/dist/array.d.ts.map +1 -0
- package/dist/function.d.ts +45 -0
- package/dist/function.d.ts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +960 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +1033 -0
- package/dist/index.js.map +1 -0
- package/dist/lang.d.ts +116 -0
- package/dist/lang.d.ts.map +1 -0
- package/dist/math.d.ts +45 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/object.d.ts +45 -0
- package/dist/object.d.ts.map +1 -0
- package/dist/string.d.ts +72 -0
- package/dist/string.d.ts.map +1 -0
- package/package.json +65 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Kage.js
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
# Kage.js
|
|
2
|
+
|
|
3
|
+
一个现代化的 JavaScript/TypeScript 工具库,类似于 lodash,提供了丰富的数组、对象、字符串、函数和数学运算工具方法。
|
|
4
|
+
|
|
5
|
+
## ✨ 特性
|
|
6
|
+
|
|
7
|
+
- 🚀 **完整的 TypeScript 支持** - 提供完整的类型定义
|
|
8
|
+
- 📦 **模块化设计** - 支持按需导入,减小打包体积
|
|
9
|
+
- 🧪 **完善的测试** - 100% 测试覆盖率
|
|
10
|
+
- 🔧 **零依赖** - 不依赖任何第三方库
|
|
11
|
+
- 📝 **详细的文档** - 每个函数都有清晰的注释
|
|
12
|
+
|
|
13
|
+
## 📦 安装
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install wssf-kage-js
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
或使用 yarn:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
yarn add wssf-kage-js
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
或使用 pnpm:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pnpm add wssf-kage-js
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 🚀 快速开始
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { chunk, camelCase, debounce, range } from 'wssf-kage-js';
|
|
35
|
+
|
|
36
|
+
// 数组操作
|
|
37
|
+
chunk([1, 2, 3, 4, 5], 2);
|
|
38
|
+
// => [[1, 2], [3, 4], [5]]
|
|
39
|
+
|
|
40
|
+
// 字符串操作
|
|
41
|
+
camelCase('hello-world');
|
|
42
|
+
// => 'helloWorld'
|
|
43
|
+
|
|
44
|
+
// 函数工具
|
|
45
|
+
const debouncedFn = debounce(() => console.log('执行'), 1000);
|
|
46
|
+
|
|
47
|
+
// 数学运算
|
|
48
|
+
range(5);
|
|
49
|
+
// => [0, 1, 2, 3, 4]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 📚 API 文档
|
|
53
|
+
|
|
54
|
+
### 语言检查 (Lang)
|
|
55
|
+
|
|
56
|
+
判断数据类型的工具函数。
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { isNil, isArray, isObject, isEmpty } from 'wssf-kage-js';
|
|
60
|
+
|
|
61
|
+
isNil(null); // => true
|
|
62
|
+
isArray([1, 2, 3]); // => true
|
|
63
|
+
isObject({}); // => true
|
|
64
|
+
isEmpty([]); // => true
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**可用方法:**
|
|
68
|
+
- `isNil(value)` - 检查是否为 null 或 undefined
|
|
69
|
+
- `isArray(value)` - 检查是否为数组
|
|
70
|
+
- `isObject(value)` - 检查是否为对象
|
|
71
|
+
- `isFunction(value)` - 检查是否为函数
|
|
72
|
+
- `isString(value)` - 检查是否为字符串
|
|
73
|
+
- `isNumber(value)` - 检查是否为数字
|
|
74
|
+
- `isBoolean(value)` - 检查是否为布尔值
|
|
75
|
+
- `isEmpty(value)` - 检查是否为空
|
|
76
|
+
|
|
77
|
+
### 数组操作 (Array)
|
|
78
|
+
|
|
79
|
+
强大的数组处理工具。
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
import { chunk, uniq, flatten, shuffle } from 'wssf-kage-js';
|
|
83
|
+
|
|
84
|
+
// 分块
|
|
85
|
+
chunk([1, 2, 3, 4, 5], 2);
|
|
86
|
+
// => [[1, 2], [3, 4], [5]]
|
|
87
|
+
|
|
88
|
+
// 去重
|
|
89
|
+
uniq([1, 2, 2, 3, 3]);
|
|
90
|
+
// => [1, 2, 3]
|
|
91
|
+
|
|
92
|
+
// 扁平化
|
|
93
|
+
flatten([1, [2, 3], [4]]);
|
|
94
|
+
// => [1, 2, 3, 4]
|
|
95
|
+
|
|
96
|
+
// 随机打乱
|
|
97
|
+
shuffle([1, 2, 3, 4, 5]);
|
|
98
|
+
// => [3, 1, 5, 2, 4] (随机顺序)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**可用方法:**
|
|
102
|
+
- `head(array)` - 获取第一个元素
|
|
103
|
+
- `last(array)` - 获取最后一个元素
|
|
104
|
+
- `tail(array)` - 获取除第一个元素外的所有元素
|
|
105
|
+
- `uniq(array)` - 数组去重
|
|
106
|
+
- `uniqBy(array, iteratee)` - 根据迭代函数去重
|
|
107
|
+
- `flatten(array)` - 浅层扁平化
|
|
108
|
+
- `flattenDeep(array)` - 深度扁平化
|
|
109
|
+
- `chunk(array, size)` - 分块数组
|
|
110
|
+
- `compact(array)` - 过滤假值
|
|
111
|
+
- `difference(array, values)` - 数组差集
|
|
112
|
+
- `intersection(array, ...arrays)` - 数组交集
|
|
113
|
+
- `sum(array)` - 数组求和
|
|
114
|
+
- `sumBy(array, iteratee)` - 根据迭代函数求和
|
|
115
|
+
- `shuffle(array)` - 随机打乱
|
|
116
|
+
- `sample(array)` - 随机取一个元素
|
|
117
|
+
- `sampleSize(array, n)` - 随机取 n 个元素
|
|
118
|
+
|
|
119
|
+
### 对象操作 (Object)
|
|
120
|
+
|
|
121
|
+
灵活的对象处理方法。
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
import { get, set, merge, pick, omit } from 'wssf-kage-js';
|
|
125
|
+
|
|
126
|
+
const obj = { a: { b: { c: 3 } } };
|
|
127
|
+
|
|
128
|
+
// 获取嵌套属性
|
|
129
|
+
get(obj, 'a.b.c');
|
|
130
|
+
// => 3
|
|
131
|
+
|
|
132
|
+
// 设置嵌套属性
|
|
133
|
+
set(obj, 'a.b.d', 4);
|
|
134
|
+
// => { a: { b: { c: 3, d: 4 } } }
|
|
135
|
+
|
|
136
|
+
// 合并对象
|
|
137
|
+
merge({ a: 1 }, { b: 2 });
|
|
138
|
+
// => { a: 1, b: 2 }
|
|
139
|
+
|
|
140
|
+
// 选取属性
|
|
141
|
+
pick({ a: 1, b: 2, c: 3 }, ['a', 'c']);
|
|
142
|
+
// => { a: 1, c: 3 }
|
|
143
|
+
|
|
144
|
+
// 排除属性
|
|
145
|
+
omit({ a: 1, b: 2, c: 3 }, ['b']);
|
|
146
|
+
// => { a: 1, c: 3 }
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**可用方法:**
|
|
150
|
+
- `cloneDeep(value)` - 深度克隆
|
|
151
|
+
- `get(obj, path, defaultValue)` - 获取嵌套属性
|
|
152
|
+
- `set(obj, path, value)` - 设置嵌套属性
|
|
153
|
+
- `merge(target, ...sources)` - 合并对象
|
|
154
|
+
- `pick(obj, keys)` - 选取属性
|
|
155
|
+
- `omit(obj, keys)` - 排除属性
|
|
156
|
+
- `keys(obj)` - 获取所有键
|
|
157
|
+
- `values(obj)` - 获取所有值
|
|
158
|
+
- `entries(obj)` - 获取键值对
|
|
159
|
+
- `invert(obj)` - 反转键值
|
|
160
|
+
- `mapValues(obj, iteratee)` - 映射对象值
|
|
161
|
+
|
|
162
|
+
### 字符串操作 (String)
|
|
163
|
+
|
|
164
|
+
丰富的字符串处理工具。
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
import { camelCase, snakeCase, kebabCase, truncate } from 'wssf-kage-js';
|
|
168
|
+
|
|
169
|
+
// 驼峰命名
|
|
170
|
+
camelCase('hello-world');
|
|
171
|
+
// => 'helloWorld'
|
|
172
|
+
|
|
173
|
+
// 蛇形命名
|
|
174
|
+
snakeCase('helloWorld');
|
|
175
|
+
// => 'hello_world'
|
|
176
|
+
|
|
177
|
+
// 短横线命名
|
|
178
|
+
kebabCase('helloWorld');
|
|
179
|
+
// => 'hello-world'
|
|
180
|
+
|
|
181
|
+
// 截断字符串
|
|
182
|
+
truncate('hello world', { length: 8 });
|
|
183
|
+
// => 'hello...'
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**可用方法:**
|
|
187
|
+
- `capitalize(str)` - 首字母大写
|
|
188
|
+
- `camelCase(str)` - 驼峰命名
|
|
189
|
+
- `snakeCase(str)` - 蛇形命名
|
|
190
|
+
- `kebabCase(str)` - 短横线命名
|
|
191
|
+
- `trim(str, chars)` - 去除空格
|
|
192
|
+
- `truncate(str, options)` - 截断字符串
|
|
193
|
+
- `words(str)` - 分词
|
|
194
|
+
- `repeat(str, n)` - 重复字符串
|
|
195
|
+
- `padStart(str, length, chars)` - 左侧填充
|
|
196
|
+
- `padEnd(str, length, chars)` - 右侧填充
|
|
197
|
+
|
|
198
|
+
### 函数工具 (Function)
|
|
199
|
+
|
|
200
|
+
高阶函数和函数式编程工具。
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
import { debounce, throttle, once, memoize, curry } from 'wssf-kage-js';
|
|
204
|
+
|
|
205
|
+
// 防抖
|
|
206
|
+
const debouncedFn = debounce(() => {
|
|
207
|
+
console.log('执行');
|
|
208
|
+
}, 1000);
|
|
209
|
+
|
|
210
|
+
// 节流
|
|
211
|
+
const throttledFn = throttle(() => {
|
|
212
|
+
console.log('执行');
|
|
213
|
+
}, 1000);
|
|
214
|
+
|
|
215
|
+
// 只执行一次
|
|
216
|
+
const onceFn = once(() => {
|
|
217
|
+
console.log('只执行一次');
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
// 记忆化
|
|
221
|
+
const memoizedFn = memoize((x) => x * 2);
|
|
222
|
+
|
|
223
|
+
// 柯里化
|
|
224
|
+
const add = (a, b, c) => a + b + c;
|
|
225
|
+
const curriedAdd = curry(add);
|
|
226
|
+
curriedAdd(1)(2)(3); // => 6
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**可用方法:**
|
|
230
|
+
- `debounce(func, wait, options)` - 防抖
|
|
231
|
+
- `throttle(func, wait, options)` - 节流
|
|
232
|
+
- `once(func)` - 只执行一次
|
|
233
|
+
- `delay(func, wait, ...args)` - 延迟执行
|
|
234
|
+
- `memoize(func, resolver)` - 记忆化
|
|
235
|
+
- `curry(func, arity)` - 柯里化
|
|
236
|
+
- `compose(...funcs)` - 函数组合
|
|
237
|
+
- `pipe(...funcs)` - 管道函数
|
|
238
|
+
|
|
239
|
+
### 数学运算 (Math)
|
|
240
|
+
|
|
241
|
+
常用的数学计算工具。
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
import { range, random, clamp, mean, max, min } from 'wssf-kage-js';
|
|
245
|
+
|
|
246
|
+
// 生成数字范围
|
|
247
|
+
range(5);
|
|
248
|
+
// => [0, 1, 2, 3, 4]
|
|
249
|
+
|
|
250
|
+
range(1, 5);
|
|
251
|
+
// => [1, 2, 3, 4]
|
|
252
|
+
|
|
253
|
+
range(0, 10, 2);
|
|
254
|
+
// => [0, 2, 4, 6, 8]
|
|
255
|
+
|
|
256
|
+
// 随机数
|
|
257
|
+
random(1, 10);
|
|
258
|
+
// => 7 (随机)
|
|
259
|
+
|
|
260
|
+
// 限制范围
|
|
261
|
+
clamp(15, 1, 10);
|
|
262
|
+
// => 10
|
|
263
|
+
|
|
264
|
+
// 求平均值
|
|
265
|
+
mean([1, 2, 3, 4, 5]);
|
|
266
|
+
// => 3
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**可用方法:**
|
|
270
|
+
- `range(start, end, step)` - 生成数字范围
|
|
271
|
+
- `random(min, max, floating)` - 生成随机数
|
|
272
|
+
- `clamp(number, min, max)` - 限制数字范围
|
|
273
|
+
- `ceil(number, precision)` - 向上取整
|
|
274
|
+
- `floor(number, precision)` - 向下取整
|
|
275
|
+
- `round(number, precision)` - 四舍五入
|
|
276
|
+
- `mean(array)` - 求平均值
|
|
277
|
+
- `max(array)` - 求最大值
|
|
278
|
+
- `min(array)` - 求最小值
|
|
279
|
+
- `maxBy(array, iteratee)` - 根据迭代函数求最大值
|
|
280
|
+
- `minBy(array, iteratee)` - 根据迭代函数求最小值
|
|
281
|
+
|
|
282
|
+
## 🧪 测试
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
# 运行测试
|
|
286
|
+
npm test
|
|
287
|
+
|
|
288
|
+
# 观察模式
|
|
289
|
+
npm run test:watch
|
|
290
|
+
|
|
291
|
+
# 生成覆盖率报告
|
|
292
|
+
npm run test:coverage
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## 📖 生成 API 文档
|
|
296
|
+
|
|
297
|
+
本项目使用 TypeDoc 从源代码自动生成 API 文档:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# 生成文档
|
|
301
|
+
npm run docs
|
|
302
|
+
|
|
303
|
+
# 观察模式(开发时使用)
|
|
304
|
+
npm run docs:watch
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
生成的文档位于 `docs/` 目录,在浏览器中打开 `docs/index.html` 即可查看。
|
|
308
|
+
|
|
309
|
+
详细的文档编写指南请参考 [DOCS_GUIDE.md](./DOCS_GUIDE.md)。
|
|
310
|
+
|
|
311
|
+
## 🔨 构建
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
npm run build
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
## 📄 许可证
|
|
318
|
+
|
|
319
|
+
MIT License
|
|
320
|
+
|
|
321
|
+
## 🤝 贡献
|
|
322
|
+
|
|
323
|
+
欢迎提交 Issue 和 Pull Request!
|
|
324
|
+
|
|
325
|
+
## 📝 更新日志
|
|
326
|
+
|
|
327
|
+
### 1.0.0 (2024-01-16)
|
|
328
|
+
- 🎉 首次发布
|
|
329
|
+
- ✨ 支持数组、对象、字符串、函数和数学运算工具
|
|
330
|
+
- 📝 完善的 TypeScript 类型定义
|
|
331
|
+
- 🧪 完整的测试覆盖
|
package/dist/array.d.ts
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数组操作模块 - 提供强大的数组处理工具
|
|
3
|
+
* @module Array
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 创建数组切片,从 start 到 end(不包含 end)
|
|
7
|
+
* @category Array
|
|
8
|
+
* @param array - 源数组
|
|
9
|
+
* @param start - 起始索引,默认为 0
|
|
10
|
+
* @param end - 结束索引(不包含),默认为数组长度
|
|
11
|
+
* @returns 切片后的新数组
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* slice([1, 2, 3, 4], 1, 3) // => [2, 3]
|
|
15
|
+
* slice([1, 2, 3, 4], 2) // => [3, 4]
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function slice<T>(array: T[], start?: number, end?: number): T[];
|
|
19
|
+
/**
|
|
20
|
+
* 返回数组的第一个元素
|
|
21
|
+
* @category Array
|
|
22
|
+
* @param array - 源数组
|
|
23
|
+
* @returns 数组的第一个元素,如果数组为空则返回 undefined
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* head([1, 2, 3]) // => 1
|
|
27
|
+
* head([]) // => undefined
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function head<T>(array: T[]): T | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* 返回数组的最后一个元素
|
|
33
|
+
* @category Array
|
|
34
|
+
* @param array - 源数组
|
|
35
|
+
* @returns 数组的最后一个元素,如果数组为空则返回 undefined
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* last([1, 2, 3]) // => 3
|
|
39
|
+
* last([]) // => undefined
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function last<T>(array: T[]): T | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* 返回数组去除第一个元素后的部分
|
|
45
|
+
* @category Array
|
|
46
|
+
* @param array - 源数组
|
|
47
|
+
* @returns 去除第一个元素后的新数组
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* tail([1, 2, 3]) // => [2, 3]
|
|
51
|
+
* tail([1]) // => []
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function tail<T>(array: T[]): T[];
|
|
55
|
+
/**
|
|
56
|
+
* 数组去重,使用 Set 实现
|
|
57
|
+
* @category Array
|
|
58
|
+
* @param array - 源数组
|
|
59
|
+
* @returns 去重后的新数组
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* uniq([1, 2, 2, 3, 3]) // => [1, 2, 3]
|
|
63
|
+
* uniq(['a', 'b', 'a']) // => ['a', 'b']
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function uniq<T>(array: T[]): T[];
|
|
67
|
+
/**
|
|
68
|
+
* 根据迭代函数的返回值去重
|
|
69
|
+
* @category Array
|
|
70
|
+
* @param array - 源数组
|
|
71
|
+
* @param iteratee - 迭代函数,用于生成唯一标识
|
|
72
|
+
* @returns 去重后的新数组
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* uniqBy([2.1, 1.2, 2.3], Math.floor)
|
|
76
|
+
* // => [2.1, 1.2]
|
|
77
|
+
*
|
|
78
|
+
* uniqBy([{ id: 1 }, { id: 2 }, { id: 1 }], o => o.id)
|
|
79
|
+
* // => [{ id: 1 }, { id: 2 }]
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function uniqBy<T>(array: T[], iteratee: (value: T) => unknown): T[];
|
|
83
|
+
/**
|
|
84
|
+
* 数组扁平化(浅层),将嵌套一层的数组展开
|
|
85
|
+
* @category Array
|
|
86
|
+
* @param array - 源数组
|
|
87
|
+
* @returns 扁平化后的新数组
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* flatten([1, [2, 3], [4]]) // => [1, 2, 3, 4]
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare function flatten<T>(array: (T | T[])[]): T[];
|
|
94
|
+
/**
|
|
95
|
+
* 深度扁平化,递归展开所有嵌套数组
|
|
96
|
+
* @category Array
|
|
97
|
+
* @param array - 源数组
|
|
98
|
+
* @returns 完全扁平化后的新数组
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* flattenDeep([1, [2, [3, [4]]]]) // => [1, 2, 3, 4]
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare function flattenDeep<T>(array: unknown[]): T[];
|
|
105
|
+
/**
|
|
106
|
+
* 将数组分割成指定大小的块
|
|
107
|
+
* @category Array
|
|
108
|
+
* @param array - 源数组
|
|
109
|
+
* @param size - 每块的大小,默认为 1
|
|
110
|
+
* @returns 分块后的二维数组
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* chunk([1, 2, 3, 4, 5], 2) // => [[1, 2], [3, 4], [5]]
|
|
114
|
+
* chunk([1, 2, 3], 1) // => [[1], [2], [3]]
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export declare function chunk<T>(array: T[], size?: number): T[][];
|
|
118
|
+
/**
|
|
119
|
+
* 过滤掉所有假值(false, null, 0, "", undefined, NaN)
|
|
120
|
+
* @category Array
|
|
121
|
+
* @param array - 源数组
|
|
122
|
+
* @returns 过滤后的新数组
|
|
123
|
+
* @example
|
|
124
|
+
* ```typescript
|
|
125
|
+
* compact([0, 1, false, 2, '', 3])
|
|
126
|
+
* // => [1, 2, 3]
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
export declare function compact<T>(array: (T | null | undefined | false | 0 | '')[]): T[];
|
|
130
|
+
/**
|
|
131
|
+
* 返回两个数组的差集(在第一个数组中但不在第二个数组中的元素)
|
|
132
|
+
* @category Array
|
|
133
|
+
* @param array - 源数组
|
|
134
|
+
* @param values - 要排除的值数组
|
|
135
|
+
* @returns 差集数组
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* difference([1, 2, 3, 4], [2, 4])
|
|
139
|
+
* // => [1, 3]
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export declare function difference<T>(array: T[], values: T[]): T[];
|
|
143
|
+
/**
|
|
144
|
+
* 返回多个数组的交集(所有数组中都存在的元素)
|
|
145
|
+
* @category Array
|
|
146
|
+
* @param array - 第一个数组
|
|
147
|
+
* @param arrays - 其他数组
|
|
148
|
+
* @returns 交集数组
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* intersection([1, 2, 3], [2, 3, 4])
|
|
152
|
+
* // => [2, 3]
|
|
153
|
+
*
|
|
154
|
+
* intersection([1, 2, 3], [2, 3], [3])
|
|
155
|
+
* // => [3]
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
export declare function intersection<T>(array: T[], ...arrays: T[][]): T[];
|
|
159
|
+
/**
|
|
160
|
+
* 计算数组中所有数字的总和
|
|
161
|
+
* @category Array
|
|
162
|
+
* @param array - 数字数组
|
|
163
|
+
* @returns 总和
|
|
164
|
+
* @example
|
|
165
|
+
* ```typescript
|
|
166
|
+
* sum([1, 2, 3, 4]) // => 10
|
|
167
|
+
* sum([]) // => 0
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
export declare function sum(array: number[]): number;
|
|
171
|
+
/**
|
|
172
|
+
* 根据迭代函数的返回值计算总和
|
|
173
|
+
* @category Array
|
|
174
|
+
* @param array - 源数组
|
|
175
|
+
* @param iteratee - 迭代函数,将数组元素转换为数字
|
|
176
|
+
* @returns 总和
|
|
177
|
+
* @example
|
|
178
|
+
* ```typescript
|
|
179
|
+
* sumBy([{ n: 1 }, { n: 2 }], o => o.n)
|
|
180
|
+
* // => 3
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
export declare function sumBy<T>(array: T[], iteratee: (value: T) => number): number;
|
|
184
|
+
/**
|
|
185
|
+
* 随机打乱数组(Fisher-Yates 洗牌算法)
|
|
186
|
+
* @category Array
|
|
187
|
+
* @param array - 源数组
|
|
188
|
+
* @returns 打乱后的新数组
|
|
189
|
+
* @example
|
|
190
|
+
* ```typescript
|
|
191
|
+
* shuffle([1, 2, 3, 4, 5])
|
|
192
|
+
* // => [3, 1, 5, 2, 4] (随机顺序)
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
export declare function shuffle<T>(array: T[]): T[];
|
|
196
|
+
/**
|
|
197
|
+
* 从数组中随机取一个元素
|
|
198
|
+
* @category Array
|
|
199
|
+
* @param array - 源数组
|
|
200
|
+
* @returns 随机元素,如果数组为空则返回 undefined
|
|
201
|
+
* @example
|
|
202
|
+
* ```typescript
|
|
203
|
+
* sample([1, 2, 3, 4, 5])
|
|
204
|
+
* // => 3 (随机)
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
export declare function sample<T>(array: T[]): T | undefined;
|
|
208
|
+
/**
|
|
209
|
+
* 从数组中随机取多个元素
|
|
210
|
+
* @category Array
|
|
211
|
+
* @param array - 源数组
|
|
212
|
+
* @param n - 要取的元素数量
|
|
213
|
+
* @returns 包含随机元素的新数组
|
|
214
|
+
* @example
|
|
215
|
+
* ```typescript
|
|
216
|
+
* sampleSize([1, 2, 3, 4, 5], 3)
|
|
217
|
+
* // => [2, 5, 1] (随机)
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
export declare function sampleSize<T>(array: T[], n: number): T[];
|
|
221
|
+
//# sourceMappingURL=array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../src/array.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,SAAI,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAEjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAEjD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAEjD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEvC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,CAAC,EAAE,CAU1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAIlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAMpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,SAAI,GAAG,CAAC,EAAE,EAAE,CAOpD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAG1D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAIjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAE3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,CAE3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAO1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAEnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAGxD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 创建防抖函数
|
|
3
|
+
*/
|
|
4
|
+
export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number, options?: {
|
|
5
|
+
leading?: boolean;
|
|
6
|
+
trailing?: boolean;
|
|
7
|
+
}): T & {
|
|
8
|
+
cancel: () => void;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* 创建节流函数
|
|
12
|
+
*/
|
|
13
|
+
export declare function throttle<T extends (...args: any[]) => any>(func: T, wait: number, options?: {
|
|
14
|
+
leading?: boolean;
|
|
15
|
+
trailing?: boolean;
|
|
16
|
+
}): T & {
|
|
17
|
+
cancel: () => void;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* 创建只执行一次的函数
|
|
21
|
+
*/
|
|
22
|
+
export declare function once<T extends (...args: any[]) => any>(func: T): T;
|
|
23
|
+
/**
|
|
24
|
+
* 延迟执行函数
|
|
25
|
+
*/
|
|
26
|
+
export declare function delay(func: (...args: any[]) => any, wait: number, ...args: any[]): NodeJS.Timeout;
|
|
27
|
+
/**
|
|
28
|
+
* 创建记忆化函数
|
|
29
|
+
*/
|
|
30
|
+
export declare function memoize<T extends (...args: any[]) => any>(func: T, resolver?: (...args: Parameters<T>) => any): T & {
|
|
31
|
+
cache: Map<any, any>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* 柯里化函数
|
|
35
|
+
*/
|
|
36
|
+
export declare function curry<T extends (...args: any[]) => any>(func: T, arity?: number): any;
|
|
37
|
+
/**
|
|
38
|
+
* 函数组合
|
|
39
|
+
*/
|
|
40
|
+
export declare function compose<T>(...funcs: Array<(arg: T) => T>): (arg: T) => T;
|
|
41
|
+
/**
|
|
42
|
+
* 管道函数
|
|
43
|
+
*/
|
|
44
|
+
export declare function pipe<T>(...funcs: Array<(arg: T) => T>): (arg: T) => T;
|
|
45
|
+
//# sourceMappingURL=function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../src/function.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACtD,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CA0C5B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACtD,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CA+C5B;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAWlE;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAEjG;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACvD,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,GACzC,CAAC,GAAG;IAAE,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,CAe9B;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrD,IAAI,EAAE,CAAC,EACP,KAAK,GAAE,MAAoB,GAC1B,GAAG,CASL;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAExE;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAErE"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { isNil, isArray, isObject, isFunction, isString, isNumber, isBoolean, isEmpty, } from './lang';
|
|
2
|
+
export { slice, head, last, tail, uniq, uniqBy, flatten, flattenDeep, chunk, compact, difference, intersection, sum, sumBy, shuffle, sample, sampleSize, } from './array';
|
|
3
|
+
export { cloneDeep, get, set, merge, pick, omit, keys, values, entries, invert, mapValues, } from './object';
|
|
4
|
+
export { upperCase, lowerCase, capitalize, camelCase, snakeCase, kebabCase, trim, trimStart, trimEnd, repeat, padStart, padEnd, truncate, words, replace, startsWith, endsWith, } from './string';
|
|
5
|
+
export { debounce, throttle, once, delay, memoize, curry, compose, pipe, } from './function';
|
|
6
|
+
export { range, random, clamp, ceil, floor, round, mean, max, min, maxBy, minBy, } from './math';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,GACR,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACL,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,WAAW,EACX,KAAK,EACL,OAAO,EACP,UAAU,EACV,YAAY,EACZ,GAAG,EACH,KAAK,EACL,OAAO,EACP,MAAM,EACN,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,SAAS,EACT,GAAG,EACH,GAAG,EACH,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,GACV,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,IAAI,EACJ,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,KAAK,EACL,OAAO,EACP,UAAU,EACV,QAAQ,GACT,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,OAAO,EACP,KAAK,EACL,OAAO,EACP,IAAI,GACL,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,KAAK,EACL,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,IAAI,EACJ,GAAG,EACH,GAAG,EACH,KAAK,EACL,KAAK,GACN,MAAM,QAAQ,CAAC"}
|