mm_expand 1.8.3 → 1.8.4
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 +253 -56
- package/index.js +198 -178
- package/lib/eventer.js +9 -0
- package/package.json +1 -1
- package/test.js +448 -656
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# mm_expand
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
这是超级美眉原型函数拓展模块,为JavaScript原生类型(String、Array、Number、Date等)提供丰富的拓展方法,使开发者能够更便捷地操作数据,简化业务逻辑,提高开发效率。
|
|
4
4
|
|
|
5
5
|
## 安装
|
|
6
6
|
|
|
@@ -8,16 +8,30 @@
|
|
|
8
8
|
npm install mm_expand
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 使用方法
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
```javascript
|
|
14
|
+
// 引入模块
|
|
15
|
+
const $ = require('mm_expand');
|
|
16
|
+
|
|
17
|
+
// 开始使用拓展方法
|
|
18
|
+
console.log('test.json'.fullname());
|
|
19
|
+
console.log([1, 2, 3].copy());
|
|
20
|
+
console.log('2024-01-01'.toTime());
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 核心功能模块
|
|
24
|
+
|
|
25
|
+
### 基础工具函数
|
|
26
|
+
|
|
27
|
+
#### $.info(obj)
|
|
28
|
+
- 描述:获取函数或对象的详细信息,用于调试和开发
|
|
15
29
|
- 参数:
|
|
16
30
|
- obj: 要查看的函数或对象
|
|
17
31
|
- 返回值:返回对象的详细字符串表示
|
|
18
32
|
|
|
19
|
-
|
|
20
|
-
-
|
|
33
|
+
#### $.sleep(milliSeconds, obj, key)
|
|
34
|
+
- 描述:延迟执行(休眠)函数,返回Promise
|
|
21
35
|
- 参数:
|
|
22
36
|
- milliSeconds: 休眠的毫秒数
|
|
23
37
|
- obj: 判断对象或函数(可选)
|
|
@@ -25,128 +39,284 @@ npm install mm_expand
|
|
|
25
39
|
- 示例:
|
|
26
40
|
```javascript
|
|
27
41
|
// 简单休眠
|
|
28
|
-
sleep(2000);
|
|
42
|
+
await $.sleep(2000);
|
|
29
43
|
|
|
30
44
|
// 带条件的休眠
|
|
31
45
|
var obj = {ok: false};
|
|
32
|
-
sleep(2000, obj, 'ok');
|
|
46
|
+
await $.sleep(2000, obj, 'ok');
|
|
33
47
|
```
|
|
34
48
|
|
|
35
|
-
|
|
36
|
-
-
|
|
49
|
+
#### $.as(obj, defaultValue)
|
|
50
|
+
- 描述:当对象为null或undefined时返回默认值,否则返回原对象
|
|
37
51
|
- 参数:
|
|
38
|
-
- obj:
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
- 返回值:相似返回true,否则返回false
|
|
52
|
+
- obj: 要检查的对象
|
|
53
|
+
- defaultValue: 当obj为null或undefined时的默认返回值
|
|
54
|
+
- 返回值:obj不为null/undefined时返回obj,否则返回defaultValue
|
|
42
55
|
|
|
43
|
-
|
|
44
|
-
-
|
|
56
|
+
#### $.speed(func, times)
|
|
57
|
+
- 描述:测试函数执行速度性能
|
|
45
58
|
- 参数:
|
|
46
59
|
- func: 要测试的函数
|
|
47
60
|
- times: 测试次数,默认1000000次
|
|
48
61
|
|
|
49
|
-
|
|
62
|
+
### 对象操作
|
|
50
63
|
|
|
51
|
-
|
|
52
|
-
-
|
|
64
|
+
#### $.push(objA, objB, bl)
|
|
65
|
+
- 描述:合并对象属性
|
|
53
66
|
- 参数:
|
|
54
67
|
- objA: 被添加的对象
|
|
55
68
|
- objB: 用作添加的对象
|
|
56
69
|
- bl: 是否补充没有的对象
|
|
57
70
|
- 返回值:合并后的新对象
|
|
58
71
|
|
|
59
|
-
|
|
72
|
+
#### $.clear(obj)
|
|
60
73
|
- 描述:清空对象值
|
|
61
74
|
- 参数:
|
|
62
75
|
- obj: 要清空的对象
|
|
63
76
|
- 返回值:返回清空后的对象
|
|
64
77
|
|
|
65
|
-
|
|
66
|
-
-
|
|
78
|
+
#### $.copy(obj, has)
|
|
79
|
+
- 描述:深度拷贝对象
|
|
67
80
|
- 参数:
|
|
68
81
|
- obj: 被拷贝的对象
|
|
69
82
|
- has: 是否只拷贝非空值
|
|
70
|
-
-
|
|
83
|
+
- 返回值:新的拷贝对象
|
|
71
84
|
|
|
72
|
-
|
|
73
|
-
-
|
|
85
|
+
#### $.keys(obj, file)
|
|
86
|
+
- 描述:获取对象所有属性名
|
|
74
87
|
- 参数:
|
|
75
88
|
- obj: 要查看的对象
|
|
76
89
|
- file: 保存结果的文件路径(可选)
|
|
77
90
|
|
|
78
|
-
|
|
91
|
+
### 数据转换
|
|
79
92
|
|
|
80
|
-
|
|
81
|
-
-
|
|
93
|
+
#### $.toJson(obj, format)
|
|
94
|
+
- 描述:将对象转换为JSON字符串
|
|
82
95
|
- 参数:
|
|
83
96
|
- obj: 要转换的对象
|
|
84
|
-
- format:
|
|
97
|
+
- format: 是否格式化输出(缩进美化)
|
|
85
98
|
- 返回值:JSON格式字符串
|
|
86
99
|
|
|
87
|
-
|
|
88
|
-
-
|
|
100
|
+
#### $.toXml(obj, format, mode)
|
|
101
|
+
- 描述:将对象转换为XML字符串
|
|
89
102
|
- 参数:
|
|
90
103
|
- obj: 要转换的对象
|
|
91
|
-
- format:
|
|
104
|
+
- format: 是否格式化输出(缩进美化)
|
|
92
105
|
- mode: 是否使用属性格式
|
|
93
106
|
- 返回值:XML格式字符串
|
|
94
107
|
|
|
95
|
-
|
|
96
|
-
-
|
|
108
|
+
#### $.toUrl(obj, url)
|
|
109
|
+
- 描述:将对象转换为URL参数字符串
|
|
97
110
|
- 参数:
|
|
98
111
|
- obj: 要转换的对象
|
|
99
112
|
- url: 基础URL地址(可选)
|
|
100
113
|
- 返回值:URL参数格式字符串
|
|
101
114
|
|
|
102
|
-
|
|
115
|
+
### String原型拓展
|
|
116
|
+
|
|
117
|
+
#### String.prototype.fullname()
|
|
118
|
+
- 描述:获取文件的完整路径
|
|
119
|
+
- 返回值:完整的文件路径字符串
|
|
120
|
+
|
|
121
|
+
#### String.prototype.isFile()
|
|
122
|
+
- 描述:检查路径是否为文件
|
|
123
|
+
- 返回值:是文件返回true,否则返回false
|
|
124
|
+
|
|
125
|
+
#### String.prototype.isDir()
|
|
126
|
+
- 描述:检查路径是否为目录
|
|
127
|
+
- 返回值:是目录返回true,否则返回false
|
|
128
|
+
|
|
129
|
+
#### String.prototype.saveText(data, encode)
|
|
130
|
+
- 描述:将字符串保存为文本文件
|
|
131
|
+
- 参数:
|
|
132
|
+
- data: 要保存的数据
|
|
133
|
+
- encode: 编码格式,默认'utf8'
|
|
134
|
+
- 返回值:保存成功返回true,失败返回false
|
|
135
|
+
|
|
136
|
+
#### String.prototype.loadText(encode)
|
|
137
|
+
- 描述:读取文件内容为字符串
|
|
138
|
+
- 参数:
|
|
139
|
+
- encode: 编码格式,默认'utf8'
|
|
140
|
+
- 返回值:文件内容字符串
|
|
141
|
+
|
|
142
|
+
#### String.prototype.saveJson(data, encode)
|
|
143
|
+
- 描述:将JSON对象保存为文件
|
|
144
|
+
- 参数:
|
|
145
|
+
- data: 要保存的JSON数据
|
|
146
|
+
- encode: 编码格式,默认'utf8'
|
|
147
|
+
- 返回值:保存成功返回true,失败返回false
|
|
148
|
+
|
|
149
|
+
#### String.prototype.loadJson(encode)
|
|
150
|
+
- 描述:读取JSON文件内容
|
|
151
|
+
- 参数:
|
|
152
|
+
- encode: 编码格式,默认'utf8'
|
|
153
|
+
- 返回值:解析后的JSON对象
|
|
154
|
+
|
|
155
|
+
#### String.prototype.checkFormat(type)
|
|
156
|
+
- 描述:检查字符串格式
|
|
157
|
+
- 参数:
|
|
158
|
+
- type: 格式类型,如'idcard'(身份证)、'phone'(手机号)等
|
|
159
|
+
- 返回值:格式正确返回true,否则返回false
|
|
160
|
+
|
|
161
|
+
#### String.prototype.toTime(format)
|
|
162
|
+
- 描述:将字符串转换为Date对象
|
|
163
|
+
- 参数:
|
|
164
|
+
- format: 日期格式(可选)
|
|
165
|
+
- 返回值:Date对象
|
|
166
|
+
|
|
167
|
+
#### String.prototype.toTimestamp()
|
|
168
|
+
- 描述:将日期字符串转换为时间戳
|
|
169
|
+
- 返回值:时间戳数字
|
|
170
|
+
|
|
171
|
+
### Array原型拓展
|
|
172
|
+
|
|
173
|
+
#### Array.prototype.copy()
|
|
174
|
+
- 描述:复制数组
|
|
175
|
+
- 返回值:新的数组实例
|
|
176
|
+
|
|
177
|
+
#### Array.prototype.clear()
|
|
178
|
+
- 描述:清空数组内容
|
|
179
|
+
- 返回值:空数组
|
|
180
|
+
|
|
181
|
+
#### Array.prototype.to2D(cols)
|
|
182
|
+
- 描述:将一维数组转换为二维数组
|
|
183
|
+
- 参数:
|
|
184
|
+
- cols: 每行的列数
|
|
185
|
+
- 返回值:二维数组
|
|
186
|
+
|
|
187
|
+
#### Array.prototype.addVal(val)
|
|
188
|
+
- 描述:向数组添加值(如果不存在)
|
|
189
|
+
- 参数:
|
|
190
|
+
- val: 要添加的值
|
|
191
|
+
- 返回值:添加后的数组
|
|
192
|
+
|
|
193
|
+
#### Array.prototype.delVal(val)
|
|
194
|
+
- 描述:从数组中删除指定值
|
|
195
|
+
- 参数:
|
|
196
|
+
- val: 要删除的值
|
|
197
|
+
- 返回值:删除后的数组
|
|
198
|
+
|
|
199
|
+
#### Array.prototype.has(val)
|
|
200
|
+
- 描述:检查数组是否包含指定值
|
|
201
|
+
- 参数:
|
|
202
|
+
- val: 要检查的值
|
|
203
|
+
- 返回值:包含返回true,否则返回false
|
|
204
|
+
|
|
205
|
+
### Number原型拓展
|
|
103
206
|
|
|
104
|
-
|
|
207
|
+
#### Number.prototype.toFloor(digits)
|
|
208
|
+
- 描述:向下取整
|
|
209
|
+
- 参数:
|
|
210
|
+
- digits: 小数位数(可选)
|
|
211
|
+
- 返回值:取整后的数字
|
|
212
|
+
|
|
213
|
+
#### Number.prototype.toCeil(digits)
|
|
214
|
+
- 描述:向上取整
|
|
215
|
+
- 参数:
|
|
216
|
+
- digits: 小数位数(可选)
|
|
217
|
+
- 返回值:取整后的数字
|
|
105
218
|
|
|
106
|
-
####
|
|
107
|
-
-
|
|
219
|
+
#### Number.prototype.toRound(digits)
|
|
220
|
+
- 描述:四舍五入
|
|
221
|
+
- 参数:
|
|
222
|
+
- digits: 小数位数(可选)
|
|
223
|
+
- 返回值:四舍五入后的数字
|
|
224
|
+
|
|
225
|
+
#### Number.prototype.toTime()
|
|
226
|
+
- 描述:将时间戳转换为Date对象
|
|
227
|
+
- 返回值:Date对象
|
|
228
|
+
|
|
229
|
+
#### Number.prototype.stamp()
|
|
230
|
+
- 描述:获取当前时间戳
|
|
231
|
+
- 返回值:时间戳数字
|
|
232
|
+
|
|
233
|
+
### Date原型拓展
|
|
234
|
+
|
|
235
|
+
#### Date.prototype.toStr(format)
|
|
236
|
+
- 描述:将Date对象格式化为字符串
|
|
237
|
+
- 参数:
|
|
238
|
+
- format: 日期格式字符串,如'yyyy-MM-dd hh:mm:ss'
|
|
239
|
+
- 返回值:格式化后的日期字符串
|
|
240
|
+
|
|
241
|
+
### 文件操作
|
|
242
|
+
|
|
243
|
+
#### File 类
|
|
244
|
+
|
|
245
|
+
##### File.prototype.getAll(dir, keyword, keyword_dir)
|
|
246
|
+
- 描述:递归搜索目录下所有文件
|
|
108
247
|
- 参数:
|
|
109
248
|
- dir: 目录地址
|
|
110
|
-
- keyword:
|
|
111
|
-
- keyword_dir:
|
|
249
|
+
- keyword: 文件搜索关键词(可选)
|
|
250
|
+
- keyword_dir: 目录搜索关键词(可选)
|
|
112
251
|
- 返回值:文件路径数组
|
|
113
252
|
|
|
114
|
-
|
|
115
|
-
-
|
|
253
|
+
##### File.prototype.get(dir, keyword)
|
|
254
|
+
- 描述:获取当前目录下所有文件(不递归)
|
|
116
255
|
- 参数:
|
|
117
256
|
- dir: 目录地址
|
|
118
|
-
- keyword:
|
|
257
|
+
- keyword: 搜索关键词(可选)
|
|
119
258
|
- 返回值:文件路径数组
|
|
120
259
|
|
|
121
|
-
|
|
260
|
+
##### File.prototype.load(file, encode)
|
|
122
261
|
- 描述:加载文件内容
|
|
123
262
|
- 参数:
|
|
124
263
|
- file: 文件路径
|
|
125
|
-
- encode:
|
|
264
|
+
- encode: 编码方式,默认'utf8'
|
|
126
265
|
- 返回值:文件内容字符串
|
|
127
266
|
|
|
128
|
-
|
|
129
|
-
-
|
|
267
|
+
##### File.prototype.save(file, data, encode)
|
|
268
|
+
- 描述:保存文件内容
|
|
130
269
|
- 参数:
|
|
131
270
|
- file: 文件路径
|
|
132
|
-
- data:
|
|
133
|
-
- encode:
|
|
271
|
+
- data: 要保存的数据内容
|
|
272
|
+
- encode: 编码方式,默认'utf8'
|
|
134
273
|
- 返回值:保存成功返回true,否则返回false
|
|
135
274
|
|
|
136
|
-
|
|
275
|
+
##### File.prototype.copy(sourcePath, targetPath)
|
|
137
276
|
- 描述:复制文件
|
|
138
277
|
- 参数:
|
|
139
278
|
- sourcePath: 源文件路径
|
|
140
279
|
- targetPath: 目标路径
|
|
141
280
|
|
|
142
|
-
|
|
281
|
+
##### File.prototype.delete(file)
|
|
143
282
|
- 描述:删除文件
|
|
144
283
|
- 参数:
|
|
145
284
|
- file: 要删除的文件路径
|
|
146
285
|
|
|
147
|
-
|
|
286
|
+
### 事件系统
|
|
287
|
+
|
|
288
|
+
#### $.eventer
|
|
289
|
+
- 描述:事件管理器实例
|
|
290
|
+
|
|
291
|
+
##### $.eventer.on(eventName, handler, key)
|
|
292
|
+
- 描述:注册事件监听器
|
|
293
|
+
- 参数:
|
|
294
|
+
- eventName: 事件名称
|
|
295
|
+
- handler: 事件处理函数
|
|
296
|
+
- key: 事件处理器标识(可选)
|
|
297
|
+
|
|
298
|
+
##### $.eventer.once(eventName, handler, key)
|
|
299
|
+
- 描述:注册一次性事件监听器(只触发一次)
|
|
300
|
+
- 参数:
|
|
301
|
+
- eventName: 事件名称
|
|
302
|
+
- handler: 事件处理函数
|
|
303
|
+
- key: 事件处理器标识(可选)
|
|
304
|
+
|
|
305
|
+
##### $.eventer.run(eventName, ...args)
|
|
306
|
+
- 描述:触发事件
|
|
307
|
+
- 参数:
|
|
308
|
+
- eventName: 事件名称
|
|
309
|
+
- ...args: 传递给事件处理器的参数
|
|
148
310
|
|
|
149
|
-
|
|
311
|
+
##### $.eventer.del(eventName, key)
|
|
312
|
+
- 描述:移除事件监听器
|
|
313
|
+
- 参数:
|
|
314
|
+
- eventName: 事件名称
|
|
315
|
+
- key: 要移除的处理器标识(可选,不提供则移除所有)
|
|
316
|
+
|
|
317
|
+
### 代码执行
|
|
318
|
+
|
|
319
|
+
#### $.run_code(code, cm, em, qm, rm)
|
|
150
320
|
- 描述:执行动态代码
|
|
151
321
|
- 参数:
|
|
152
322
|
- code: 要执行的代码字符串
|
|
@@ -156,11 +326,38 @@ sleep(2000, obj, 'ok');
|
|
|
156
326
|
- rm: 结果参数
|
|
157
327
|
- 返回值:执行结果
|
|
158
328
|
|
|
329
|
+
## 模块加载与管理
|
|
330
|
+
|
|
331
|
+
#### $.load(id, module)
|
|
332
|
+
- 描述:加载模块
|
|
333
|
+
- 参数:
|
|
334
|
+
- id: 模块ID
|
|
335
|
+
- module: 模块对象
|
|
336
|
+
|
|
337
|
+
#### $.unload(id)
|
|
338
|
+
- 描述:卸载模块
|
|
339
|
+
- 参数:
|
|
340
|
+
- id: 模块ID
|
|
341
|
+
|
|
342
|
+
#### $.reload(id)
|
|
343
|
+
- 描述:重新加载模块
|
|
344
|
+
- 参数:
|
|
345
|
+
- id: 模块ID
|
|
346
|
+
|
|
347
|
+
## 最佳实践
|
|
348
|
+
|
|
349
|
+
1. **文件路径处理**:使用`String.prototype.fullname()`获取完整路径,确保跨平台兼容性
|
|
350
|
+
2. **错误处理**:所有文件操作(saveText、saveJson等)都返回布尔值表示成功/失败,建议检查返回值
|
|
351
|
+
3. **异步操作**:对于需要等待的操作,如sleep、事件触发等,使用await/async语法
|
|
352
|
+
4. **对象深拷贝**:使用`$.copy()`进行对象深拷贝,避免引用问题
|
|
353
|
+
5. **事件管理**:使用$.eventer系统进行事件发布订阅,避免直接函数调用导致的耦合
|
|
354
|
+
|
|
159
355
|
## 注意事项
|
|
160
356
|
|
|
161
|
-
1.
|
|
162
|
-
2.
|
|
163
|
-
3.
|
|
357
|
+
1. 所有文件路径操作都支持跨平台,内部会自动处理路径分隔符
|
|
358
|
+
2. 文件操作相关函数已添加错误处理,返回布尔值表示操作结果
|
|
359
|
+
3. 在处理大量数据时,建议使用异步方式避免阻塞主线程
|
|
360
|
+
4. 原型扩展可能与其他库冲突,使用时请注意命名空间隔离
|
|
164
361
|
|
|
165
362
|
## 许可证
|
|
166
363
|
|