amis-formula 3.1.0 → 3.2.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/esm/evalutor.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.1.0
2
+ * amis-formula v3.2.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
@@ -398,14 +398,12 @@ var Evaluator = /** @class */ (function () {
398
398
  return result;
399
399
  };
400
400
  /**
401
- * 示例:IF(A, B, C)
401
+ * 如果满足条件condition,则返回consequent,否则返回alternate,支持多层嵌套IF函数。
402
402
  *
403
- * 如果满足条件A,则返回B,否则返回C,支持多层嵌套IF函数。
404
- *
405
- * 也可以用表达式如:A ? B : C
403
+ * 等价于直接用JS表达式如:condition ? consequent : alternate。
406
404
  *
407
405
  * @example IF(condition, consequent, alternate)
408
- * @param {expression} condition - 条件表达式.
406
+ * @param {expression} condition 条件表达式。例如:语文成绩>80
409
407
  * @param {any} consequent 条件判断通过的返回结果
410
408
  * @param {any} alternate 条件判断不通过的返回结果
411
409
  * @namespace 逻辑函数
@@ -416,16 +414,16 @@ var Evaluator = /** @class */ (function () {
416
414
  return condition() ? trueValue() : falseValue();
417
415
  };
418
416
  /**
419
- * 条件全部符合,返回 true,否则返回 false
417
+ * 条件全部符合,返回 true,否则返回 false
420
418
  *
421
- * 示例:AND(语文成绩>80, 数学成绩>80)
419
+ * 示例:AND(语文成绩>80, 数学成绩>80)
422
420
  *
423
- * 语文成绩和数学成绩都大于 80,则返回 true,否则返回 false
421
+ * 语文成绩和数学成绩都大于 80,则返回 true,否则返回 false
424
422
  *
425
- * 也可以直接用表达式如:语文成绩>80 && 数学成绩>80
423
+ * 等价于直接用JS表达式如:语文成绩>80 && 数学成绩>80
426
424
  *
427
425
  * @example AND(expression1, expression2, ...expressionN)
428
- * @param {...expression} conditions - 条件表达式.
426
+ * @param {...expression} conditions 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80
429
427
  * @namespace 逻辑函数
430
428
  *
431
429
  * @returns {boolean}
@@ -438,16 +436,16 @@ var Evaluator = /** @class */ (function () {
438
436
  return condtions.every(function (c) { return c(); });
439
437
  };
440
438
  /**
441
- * 条件任意一个满足条件,返回 true,否则返回 false
439
+ * 条件任意一个满足条件,返回 true,否则返回 false
442
440
  *
443
- * 示例:OR(语文成绩>80, 数学成绩>80)
441
+ * 示例:OR(语文成绩>80, 数学成绩>80)
444
442
  *
445
- * 语文成绩和数学成绩任意一个大于 80,则返回 true,否则返回 false
443
+ * 语文成绩和数学成绩任意一个大于 80,则返回 true,否则返回 false
446
444
  *
447
- * 也可以直接用表达式如:语文成绩>80 || 数学成绩>80
445
+ * 等价于直接用JS表达式如:语文成绩>80 || 数学成绩>80
448
446
  *
449
447
  * @example OR(expression1, expression2, ...expressionN)
450
- * @param {...expression} conditions - 条件表达式.
448
+ * @param {...expression} conditions 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80
451
449
  * @namespace 逻辑函数
452
450
  *
453
451
  * @returns {boolean}
@@ -462,9 +460,12 @@ var Evaluator = /** @class */ (function () {
462
460
  /**
463
461
  * 异或处理,多个表达式组中存在奇数个真时认为真。
464
462
  *
465
- * @example XOR(condition1, condition2)
466
- * @param {expression} condition1 - 条件表达式1
467
- * @param {expression} condition2 - 条件表达式2
463
+ * 示例:XOR(语文成绩 > 80, 数学成绩 > 80, 英语成绩 > 80)
464
+ *
465
+ * 三门成绩中有一门或者三门大于 80,则返回 true,否则返回 false。
466
+ *
467
+ * @example XOR(condition1, condition2, ...expressionN)
468
+ * @param {...expression} condition 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80
468
469
  * @namespace 逻辑函数
469
470
  *
470
471
  * @returns {boolean}
@@ -479,12 +480,13 @@ var Evaluator = /** @class */ (function () {
479
480
  /**
480
481
  * 判断函数集合,相当于多个 else if 合并成一个。
481
482
  *
482
- * 示例:IFS(语文成绩 > 80, "优秀", 语文成绩 > 60, "良", "继续努力")
483
+ * 示例:IFS(语文成绩 > 80, "优秀", 语文成绩 > 60, "良", "继续努力")
483
484
  *
484
485
  * 如果语文成绩大于 80,则返回优秀,否则判断大于 60 分,则返回良,否则返回继续努力。
485
486
  *
486
487
  * @example IFS(condition1, result1, condition2, result2,...conditionN, resultN)
487
- * @param {...any} args - 条件,返回值集合
488
+ * @param {...expression} condition 条件表达式
489
+ * @param {...any} result 返回值
488
490
  * @namespace 逻辑函数
489
491
  * @returns {any} 第一个满足条件的结果,没有命中的返回 false。
490
492
  */
@@ -506,7 +508,7 @@ var Evaluator = /** @class */ (function () {
506
508
  return;
507
509
  };
508
510
  /**
509
- * 返回传入数字的绝对值
511
+ * 返回传入数字的绝对值。
510
512
  *
511
513
  * @example ABS(num)
512
514
  * @param {number} num - 数值
@@ -519,7 +521,7 @@ var Evaluator = /** @class */ (function () {
519
521
  return Math.abs(a);
520
522
  };
521
523
  /**
522
- * 获取最大值,如果只有一个参数且是数组,则计算这个数组内的值
524
+ * 获取最大值,如果只有一个参数且是数组,则计算这个数组内的值。
523
525
  *
524
526
  * @example MAX(num1, num2, ...numN)
525
527
  * @param {...number} num - 数值
@@ -537,7 +539,7 @@ var Evaluator = /** @class */ (function () {
537
539
  return Math.max.apply(Math, arr.map(function (item) { return _this.formatNumber(item); }));
538
540
  };
539
541
  /**
540
- * 获取最小值,如果只有一个参数且是数组,则计算这个数组内的值
542
+ * 获取最小值,如果只有一个参数且是数组,则计算这个数组内的值。
541
543
  *
542
544
  * @example MIN(num1, num2, ...numN)
543
545
  * @param {...number} num - 数值
@@ -555,7 +557,7 @@ var Evaluator = /** @class */ (function () {
555
557
  return Math.min.apply(Math, arr.map(function (item) { return _this.formatNumber(item); }));
556
558
  };
557
559
  /**
558
- * 求和,如果只有一个参数且是数组,则计算这个数组内的值
560
+ * 求和,如果只有一个参数且是数组,则计算这个数组内的值。
559
561
  *
560
562
  * @example SUM(num1, num2, ...numN)
561
563
  * @param {...number} num - 数值
@@ -573,7 +575,7 @@ var Evaluator = /** @class */ (function () {
573
575
  return arr.reduce(function (sum, a) { return sum + _this.formatNumber(a) || 0; }, 0);
574
576
  };
575
577
  /**
576
- * 将数值向下取整为最接近的整数
578
+ * 将数值向下取整为最接近的整数。
577
579
  *
578
580
  * @example INT(num)
579
581
  * @param {number} num - 数值
@@ -585,7 +587,7 @@ var Evaluator = /** @class */ (function () {
585
587
  return Math.floor(this.formatNumber(n));
586
588
  };
587
589
  /**
588
- * 返回两数相除的余数,参数 number 是被除数,divisor 是除数
590
+ * 返回两数相除的余数,参数 number 是被除数,divisor 是除数。
589
591
  *
590
592
  * @example MOD(num, divisor)
591
593
  * @param {number} num - 被除数
@@ -598,7 +600,7 @@ var Evaluator = /** @class */ (function () {
598
600
  return this.formatNumber(a) % this.formatNumber(b);
599
601
  };
600
602
  /**
601
- * 圆周率 3.1415...
603
+ * 圆周率 3.1415...。
602
604
  *
603
605
  * @example PI()
604
606
  * @namespace 数学函数
@@ -613,7 +615,7 @@ var Evaluator = /** @class */ (function () {
613
615
  *
614
616
  * @example ROUND(num[, numDigits = 2])
615
617
  * @param {number} num - 要处理的数字
616
- * @param {number} numDigits - 小数位数
618
+ * @param {number} numDigits - 小数位数,默认为2
617
619
  * @namespace 数学函数
618
620
  *
619
621
  * @returns {number} 传入数值四舍五入后的结果
@@ -634,7 +636,7 @@ var Evaluator = /** @class */ (function () {
634
636
  *
635
637
  * @example FLOOR(num[, numDigits=2])
636
638
  * @param {number} num - 要处理的数字
637
- * @param {number} numDigits - 小数位数
639
+ * @param {number} numDigits - 小数位数,默认为2
638
640
  * @namespace 数学函数
639
641
  *
640
642
  * @returns {number} 传入数值向下取整后的结果
@@ -655,7 +657,7 @@ var Evaluator = /** @class */ (function () {
655
657
  *
656
658
  * @example CEIL(num[, numDigits=2])
657
659
  * @param {number} num - 要处理的数字
658
- * @param {number} numDigits - 小数位数
660
+ * @param {number} numDigits - 小数位数,默认为2
659
661
  * @namespace 数学函数
660
662
  *
661
663
  * @returns {number} 传入数值向上取整后的结果
@@ -684,7 +686,7 @@ var Evaluator = /** @class */ (function () {
684
686
  return Math.sqrt(this.formatNumber(n));
685
687
  };
686
688
  /**
687
- * 返回所有参数的平均值,如果只有一个参数且是数组,则计算这个数组内的值
689
+ * 返回所有参数的平均值,如果只有一个参数且是数组,则计算这个数组内的值。
688
690
  *
689
691
  * @example AVG(num1, num2, ...numN)
690
692
  * @param {...number} num - 要处理的数字
@@ -702,7 +704,7 @@ var Evaluator = /** @class */ (function () {
702
704
  return (this.fnSUM.apply(this, arr.map(function (item) { return _this.formatNumber(item); })) / arr.length);
703
705
  };
704
706
  /**
705
- * 返回数据点与数据均值点之差(数据偏差)的平方和,如果只有一个参数且是数组,则计算这个数组内的值
707
+ * 返回数据点与数据均值点之差(数据偏差)的平方和,如果只有一个参数且是数组,则计算这个数组内的值。
706
708
  *
707
709
  * @example DEVSQ(num1, num2, ...numN)
708
710
  * @param {...number} num - 要处理的数字
@@ -741,7 +743,7 @@ var Evaluator = /** @class */ (function () {
741
743
  return result;
742
744
  };
743
745
  /**
744
- * 数据点到其算术平均值的绝对偏差的平均值
746
+ * 数据点到其算术平均值的绝对偏差的平均值。
745
747
  *
746
748
  * @example AVEDEV(num1, num2, ...numN)
747
749
  * @param {...number} num - 要处理的数字
@@ -783,7 +785,7 @@ var Evaluator = /** @class */ (function () {
783
785
  return result / nums.length;
784
786
  };
785
787
  /**
786
- * 数据点的调和平均值,如果只有一个参数且是数组,则计算这个数组内的值
788
+ * 数据点的调和平均值,如果只有一个参数且是数组,则计算这个数组内的值。
787
789
  *
788
790
  * @example HARMEAN(num1, num2, ...numN)
789
791
  * @param {...number} num - 要处理的数字
@@ -823,7 +825,7 @@ var Evaluator = /** @class */ (function () {
823
825
  return nums.length / den;
824
826
  };
825
827
  /**
826
- * 数据集中第 k 个最大值
828
+ * 数据集中第 k 个最大值。
827
829
  *
828
830
  * @example LARGE(array, k)
829
831
  * @param {array} nums - 要处理的数字
@@ -846,7 +848,7 @@ var Evaluator = /** @class */ (function () {
846
848
  })[k - 1];
847
849
  };
848
850
  /**
849
- * 将数值转为中文大写金额
851
+ * 将数值转为中文大写金额。
850
852
  *
851
853
  * @example UPPERMONEY(num)
852
854
  * @param {number} num - 要处理的数字
@@ -892,9 +894,9 @@ var Evaluator = /** @class */ (function () {
892
894
  /**
893
895
  * 返回大于等于 0 且小于 1 的均匀分布随机实数。每一次触发计算都会变化。
894
896
  *
895
- * 示例:`RAND()*100`
897
+ * 示例:`RAND()*100`,
896
898
  *
897
- * 返回 0-100 之间的随机数
899
+ * 返回 0-100 之间的随机数。
898
900
  *
899
901
  * @example RAND()
900
902
  * @namespace 数学函数
@@ -905,7 +907,7 @@ var Evaluator = /** @class */ (function () {
905
907
  return Math.random();
906
908
  };
907
909
  /**
908
- * 取数据最后一个
910
+ * 取数据最后一个。
909
911
  *
910
912
  * @example LAST(array)
911
913
  * @param {...number} arr - 要处理的数组
@@ -952,7 +954,7 @@ var Evaluator = /** @class */ (function () {
952
954
  return text.substring(text.length - len, text.length);
953
955
  };
954
956
  /**
955
- * 计算文本的长度
957
+ * 计算文本的长度。
956
958
  *
957
959
  * @example LEN(text)
958
960
  * @param {string} text - 要处理的文本
@@ -965,7 +967,7 @@ var Evaluator = /** @class */ (function () {
965
967
  return text === null || text === void 0 ? void 0 : text.length;
966
968
  };
967
969
  /**
968
- * 计算文本集合中所有文本的长度
970
+ * 计算文本集合中所有文本的长度。
969
971
  *
970
972
  * @example LENGTH(textArr)
971
973
  * @param {string[]} textArr - 要处理的文本集合
@@ -981,7 +983,7 @@ var Evaluator = /** @class */ (function () {
981
983
  return this.fnLEN.call(this, args);
982
984
  };
983
985
  /**
984
- * 判断文本是否为空
986
+ * 判断文本是否为空。
985
987
  *
986
988
  * @example ISEMPTY(text)
987
989
  * @param {string} text - 要处理的文本
@@ -993,7 +995,7 @@ var Evaluator = /** @class */ (function () {
993
995
  return !text || !String(text).trim();
994
996
  };
995
997
  /**
996
- * 将多个传入值连接成文本
998
+ * 将多个传入值连接成文本。
997
999
  *
998
1000
  * @example CONCATENATE(text1, text2, ...textN)
999
1001
  * @param {...string} text - 文本集合
@@ -1011,7 +1013,7 @@ var Evaluator = /** @class */ (function () {
1011
1013
  /**
1012
1014
  * 返回计算机字符集的数字代码所对应的字符。
1013
1015
  *
1014
- * `CHAR(97)` 等价于 "a"
1016
+ * 示例:`CHAR(97)` 等价于 "a"
1015
1017
  *
1016
1018
  * @example CHAR(code)
1017
1019
  * @param {number} code - 编码值
@@ -1023,7 +1025,7 @@ var Evaluator = /** @class */ (function () {
1023
1025
  return String.fromCharCode(code);
1024
1026
  };
1025
1027
  /**
1026
- * 将传入文本转成小写
1028
+ * 将传入文本转成小写。
1027
1029
  *
1028
1030
  * @example LOWER(text)
1029
1031
  * @param {string} text - 文本
@@ -1036,7 +1038,7 @@ var Evaluator = /** @class */ (function () {
1036
1038
  return text.toLowerCase();
1037
1039
  };
1038
1040
  /**
1039
- * 将传入文本转成大写
1041
+ * 将传入文本转成大写。
1040
1042
  *
1041
1043
  * @example UPPER(text)
1042
1044
  * @param {string} text - 文本
@@ -1049,7 +1051,7 @@ var Evaluator = /** @class */ (function () {
1049
1051
  return text.toUpperCase();
1050
1052
  };
1051
1053
  /**
1052
- * 将传入文本首字母转成大写
1054
+ * 将传入文本首字母转成大写。
1053
1055
  *
1054
1056
  * @example UPPERFIRST(text)
1055
1057
  * @param {string} text - 文本
@@ -1062,11 +1064,11 @@ var Evaluator = /** @class */ (function () {
1062
1064
  return upperFirst(text);
1063
1065
  };
1064
1066
  /**
1065
- * 向前补齐文本长度
1067
+ * 向前补齐文本长度。
1066
1068
  *
1067
- * 示例 `PADSTART("6", 2, "0")`
1069
+ * 示例 `PADSTART("6", 2, "0")`,
1068
1070
  *
1069
- * 返回 `06`
1071
+ * 返回 `06`。
1070
1072
  *
1071
1073
  * @example PADSTART(text)
1072
1074
  * @param {string} text - 文本
@@ -1081,11 +1083,11 @@ var Evaluator = /** @class */ (function () {
1081
1083
  return padStart(text, num, pad);
1082
1084
  };
1083
1085
  /**
1084
- * 将文本转成标题
1086
+ * 将文本转成标题。
1085
1087
  *
1086
- * 示例 `CAPITALIZE("star")`
1088
+ * 示例 `CAPITALIZE("star")`,
1087
1089
  *
1088
- * 返回 `Star`
1090
+ * 返回 `Star`。
1089
1091
  *
1090
1092
  * @example CAPITALIZE(text)
1091
1093
  * @param {string} text - 文本
@@ -1098,11 +1100,11 @@ var Evaluator = /** @class */ (function () {
1098
1100
  return capitalize(text);
1099
1101
  };
1100
1102
  /**
1101
- * 对文本进行 HTML 转义
1103
+ * 对文本进行 HTML 转义。
1102
1104
  *
1103
- * 示例 `ESCAPE("<star>&")`
1105
+ * 示例 `ESCAPE("<star>&")`,
1104
1106
  *
1105
- * 返回 `&lt;start&gt;&amp;`
1107
+ * 返回 `&lt;start&gt;&amp;`。
1106
1108
  *
1107
1109
  * @example ESCAPE(text)
1108
1110
  * @param {string} text - 文本
@@ -1115,11 +1117,11 @@ var Evaluator = /** @class */ (function () {
1115
1117
  return escape(text);
1116
1118
  };
1117
1119
  /**
1118
- * 对文本长度进行截断
1120
+ * 对文本长度进行截断。
1119
1121
  *
1120
- * 示例 `TRUNCATE("amis.baidu.com", 6)`
1122
+ * 示例 `TRUNCATE("amis.baidu.com", 6)`,
1121
1123
  *
1122
- * 返回 `amis...`
1124
+ * 返回 `amis...`。
1123
1125
  *
1124
1126
  * @example TRUNCATE(text, 6)
1125
1127
  * @param {string} text - 文本
@@ -1133,7 +1135,7 @@ var Evaluator = /** @class */ (function () {
1133
1135
  return truncate(text, { length: length });
1134
1136
  };
1135
1137
  /**
1136
- * 取在某个分隔符之前的所有字符串
1138
+ * 取在某个分隔符之前的所有字符串。
1137
1139
  *
1138
1140
  * @example BEFORELAST(text, '.')
1139
1141
  * @param {string} text - 文本
@@ -1148,11 +1150,11 @@ var Evaluator = /** @class */ (function () {
1148
1150
  return text.split(delimiter).slice(0, -1).join(delimiter) || text + '';
1149
1151
  };
1150
1152
  /**
1151
- * 将文本根据指定片段分割成数组
1153
+ * 将文本根据指定片段分割成数组。
1152
1154
  *
1153
- * 示例:`SPLIT("a,b,c", ",")`
1155
+ * 示例:`SPLIT("a,b,c", ",")`,
1154
1156
  *
1155
- * 返回 `["a", "b", "c"]`
1157
+ * 返回 `["a", "b", "c"]`。
1156
1158
  *
1157
1159
  * @example SPLIT(text, ',')
1158
1160
  * @param {string} text - 文本
@@ -1167,7 +1169,7 @@ var Evaluator = /** @class */ (function () {
1167
1169
  return text.split(sep);
1168
1170
  };
1169
1171
  /**
1170
- * 将文本去除前后空格
1172
+ * 将文本去除前后空格。
1171
1173
  *
1172
1174
  * @example TRIM(text)
1173
1175
  * @param {string} text - 文本
@@ -1180,11 +1182,11 @@ var Evaluator = /** @class */ (function () {
1180
1182
  return text.trim();
1181
1183
  };
1182
1184
  /**
1183
- * 去除文本中的 HTML 标签
1185
+ * 去除文本中的 HTML 标签。
1184
1186
  *
1185
- * 示例:`STRIPTAG("<b>amis</b>")`
1187
+ * 示例:`STRIPTAG("<b>amis</b>")`,
1186
1188
  *
1187
- * 返回:`amis`
1189
+ * 返回:`amis`。
1188
1190
  *
1189
1191
  * @example STRIPTAG(text)
1190
1192
  * @param {string} text - 文本
@@ -1197,11 +1199,11 @@ var Evaluator = /** @class */ (function () {
1197
1199
  return text.replace(/<\/?[^>]+(>|$)/g, '');
1198
1200
  };
1199
1201
  /**
1200
- * 将字符串中的换行转成 HTML `<br>`,用于简单换行的场景
1202
+ * 将字符串中的换行转成 HTML `<br>`,用于简单换行的场景。
1201
1203
  *
1202
- * 示例:`LINEBREAK("\n")`
1204
+ * 示例:`LINEBREAK("\n")`,
1203
1205
  *
1204
- * 返回:`<br/>`
1206
+ * 返回:`<br/>`。
1205
1207
  *
1206
1208
  * @example LINEBREAK(text)
1207
1209
  * @param {string} text - 文本
@@ -1214,7 +1216,7 @@ var Evaluator = /** @class */ (function () {
1214
1216
  return text.replace(/(?:\r\n|\r|\n)/g, '<br/>');
1215
1217
  };
1216
1218
  /**
1217
- * 判断字符串(text)是否以特定字符串(startString)开始,是则返回 True,否则返回 False
1219
+ * 判断字符串(text)是否以特定字符串(startString)开始,是则返回 true,否则返回 false。
1218
1220
  *
1219
1221
  * @example STARTSWITH(text, '片段')
1220
1222
  * @param {string} text - 文本
@@ -1231,7 +1233,7 @@ var Evaluator = /** @class */ (function () {
1231
1233
  return text.indexOf(search) === 0;
1232
1234
  };
1233
1235
  /**
1234
- * 判断字符串(text)是否以特定字符串(endString)结束,是则返回 True,否则返回 False
1236
+ * 判断字符串(text)是否以特定字符串(endString)结束,是则返回 true,否则返回 false。
1235
1237
  *
1236
1238
  * @example ENDSWITH(text, '片段')
1237
1239
  * @param {string} text - 文本
@@ -1248,7 +1250,7 @@ var Evaluator = /** @class */ (function () {
1248
1250
  return text.indexOf(search, text.length - search.length) !== -1;
1249
1251
  };
1250
1252
  /**
1251
- * 判断参数 1 中的文本是否包含参数 2 中的文本。
1253
+ * 判断参数 1 中的文本是否包含参数 2 中的文本,是则返回 true,否则返回 false。
1252
1254
  *
1253
1255
  * @example CONTAINS(text, searchText)
1254
1256
  * @param {string} text - 文本
@@ -1291,7 +1293,7 @@ var Evaluator = /** @class */ (function () {
1291
1293
  return result;
1292
1294
  };
1293
1295
  /**
1294
- * 对文本进行搜索,返回命中的位置
1296
+ * 对文本进行搜索,返回命中的位置。
1295
1297
  *
1296
1298
  * @example SEARCH(text, search, 0)
1297
1299
  * @param {string} text - 要处理的文本
@@ -1312,7 +1314,7 @@ var Evaluator = /** @class */ (function () {
1312
1314
  return -1;
1313
1315
  };
1314
1316
  /**
1315
- * 返回文本字符串中从指定位置开始的特定数目的字符
1317
+ * 返回文本字符串中从指定位置开始的特定数目的字符。
1316
1318
  *
1317
1319
  * @example MID(text, from, len)
1318
1320
  * @param {string} text - 要处理的文本
@@ -1327,11 +1329,11 @@ var Evaluator = /** @class */ (function () {
1327
1329
  return text.substring(from, from + len);
1328
1330
  };
1329
1331
  /**
1330
- * 返回路径中的文件名
1332
+ * 返回路径中的文件名。
1331
1333
  *
1332
- * 示例:`/home/amis/a.json`
1334
+ * 示例:`/home/amis/a.json`,
1333
1335
  *
1334
- * 返回:a.json`
1336
+ * 返回:a.json`。
1335
1337
  *
1336
1338
  * @example BASENAME(text)
1337
1339
  * @param {string} text - 要处理的文本
@@ -1347,8 +1349,8 @@ var Evaluator = /** @class */ (function () {
1347
1349
  /**
1348
1350
  * 创建日期对象,可以通过特定格式的字符串,或者数值。
1349
1351
  *
1350
- * 需要注意的是,其中月份的数值是从0开始的,也就是说,
1351
- * 如果是12月份,你应该传入数值11。
1352
+ * 需要注意的是,其中月份的数值是从0开始的,
1353
+ * 即如果是12月份,你应该传入数值11。
1352
1354
  *
1353
1355
  * @example DATE(2021, 11, 6, 8, 20, 0)
1354
1356
  * @example DATE('2021-12-06 08:20:00')
@@ -1363,10 +1365,9 @@ var Evaluator = /** @class */ (function () {
1363
1365
  return new Date(year, month, day, hour, minute, second);
1364
1366
  };
1365
1367
  /**
1366
- * 返回时间的时间戳
1368
+ * 返回时间的时间戳。
1367
1369
  *
1368
1370
  * @example TIMESTAMP(date[, format = "X"])
1369
- * @example TIMESTAMP(date, 'x')
1370
1371
  * @namespace 日期函数
1371
1372
  * @param {date} date 日期对象
1372
1373
  * @param {string} format 时间戳格式,带毫秒传入 'x'。默认为 'X' 不带毫秒的。
@@ -1377,7 +1378,7 @@ var Evaluator = /** @class */ (function () {
1377
1378
  return parseInt(moment(this.normalizeDate(date)).format(format === 'x' ? 'x' : 'X'), 10);
1378
1379
  };
1379
1380
  /**
1380
- * 返回今天的日期
1381
+ * 返回今天的日期。
1381
1382
  *
1382
1383
  * @example TODAY()
1383
1384
  * @namespace 日期函数
@@ -1399,11 +1400,11 @@ var Evaluator = /** @class */ (function () {
1399
1400
  return new Date();
1400
1401
  };
1401
1402
  /**
1402
- * 获取日期的星期几,
1403
+ * 获取日期的星期几。
1403
1404
  *
1404
- * 示例:
1405
+ * 示例
1405
1406
  *
1406
- * WEEKDAY('2023-02-27') 得到 1
1407
+ * WEEKDAY('2023-02-27') 得到 1
1407
1408
  *
1408
1409
  * @example WEEKDAY(date)
1409
1410
  * @namespace 日期函数
@@ -1417,11 +1418,11 @@ var Evaluator = /** @class */ (function () {
1417
1418
  return type === 2 ? md.isoWeekday() : md.weekday();
1418
1419
  };
1419
1420
  /**
1420
- * 获取年份的星期,即第几周
1421
+ * 获取年份的星期,即第几周。
1421
1422
  *
1422
- * 示例:
1423
+ * 示例
1423
1424
  *
1424
- * WEEK('2023-03-05') 得到 10
1425
+ * WEEK('2023-03-05') 得到 10
1425
1426
  *
1426
1427
  * @example WEEK(date)
1427
1428
  * @namespace 日期函数
@@ -1436,14 +1437,14 @@ var Evaluator = /** @class */ (function () {
1436
1437
  return isISO ? md.isoWeek() : md.week();
1437
1438
  };
1438
1439
  /**
1439
- * 对日期、日期字符串、时间戳进行格式化
1440
+ * 对日期、日期字符串、时间戳进行格式化。
1440
1441
  *
1441
- * 示例:
1442
+ * 示例
1442
1443
  *
1443
- * DATETOSTR('12/25/2022', 'YYYY-MM-DD') 得到 '2022.12.25'
1444
- * DATETOSTR(1676563200, 'YYYY.MM.DD') 得到 '2023.02.17'
1445
- * DATETOSTR(1676563200000, 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
1446
- * DATETOSTR(DATE('2021-12-21'), 'YYYY.MM.DD hh:mm:ss') 得到 '2021.12.21 08:00:00'
1444
+ * DATETOSTR('12/25/2022', 'YYYY-MM-DD') 得到 '2022.12.25'
1445
+ * DATETOSTR(1676563200, 'YYYY.MM.DD') 得到 '2023.02.17'
1446
+ * DATETOSTR(1676563200000, 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
1447
+ * DATETOSTR(DATE('2021-12-21'), 'YYYY.MM.DD hh:mm:ss') 得到 '2021.12.21 08:00:00'
1447
1448
  *
1448
1449
  * @example DATETOSTR(date, 'YYYY-MM-DD')
1449
1450
  * @namespace 日期函数
@@ -1458,16 +1459,16 @@ var Evaluator = /** @class */ (function () {
1458
1459
  return moment(date).format(format);
1459
1460
  };
1460
1461
  /**
1461
- * 获取日期范围字符串中的开始时间、结束时间
1462
+ * 获取日期范围字符串中的开始时间、结束时间。
1462
1463
  *
1463
1464
  * 示例:
1464
1465
  *
1465
- * DATERANGESPLIT('1676563200, 1676735999') 得到 [1676563200, 1676735999]
1466
- * DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 [2023.02.17 12:00:00, 2023.02.18 11:59:59]
1467
- * DATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
1468
- * DATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
1469
- * DATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'
1470
- * DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'
1466
+ * DATERANGESPLIT('1676563200, 1676735999') 得到 [1676563200, 1676735999]
1467
+ * DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 [2023.02.17 12:00:00, 2023.02.18 11:59:59]
1468
+ * DATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
1469
+ * DATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
1470
+ * DATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'
1471
+ * DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'
1471
1472
  *
1472
1473
  * @example DATERANGESPLIT(date, 'YYYY-MM-DD')
1473
1474
  * @namespace 日期函数
@@ -1500,7 +1501,7 @@ var Evaluator = /** @class */ (function () {
1500
1501
  return dateArr;
1501
1502
  };
1502
1503
  /**
1503
- * 返回日期的指定范围的开端
1504
+ * 返回日期的指定范围的开端。
1504
1505
  *
1505
1506
  * @namespace 日期函数
1506
1507
  * @example STARTOF(date[unit = "day"])
@@ -1514,7 +1515,8 @@ var Evaluator = /** @class */ (function () {
1514
1515
  return format ? md.format(format) : md.toDate();
1515
1516
  };
1516
1517
  /**
1517
- * 返回日期的指定范围的末尾
1518
+ * 返回日期的指定范围的末尾。
1519
+ *
1518
1520
  * @namespace 日期函数
1519
1521
  * @example ENDOF(date[unit = "day"])
1520
1522
  * @param {date} date 日期对象
@@ -1552,7 +1554,8 @@ var Evaluator = /** @class */ (function () {
1552
1554
  });
1553
1555
  };
1554
1556
  /**
1555
- * 返回日期的年份
1557
+ * 返回日期的年份。
1558
+ *
1556
1559
  * @namespace 日期函数
1557
1560
  * @example YEAR(date)
1558
1561
  * @param {date} date 日期对象
@@ -1575,7 +1578,8 @@ var Evaluator = /** @class */ (function () {
1575
1578
  return date.getMonth() + 1;
1576
1579
  };
1577
1580
  /**
1578
- * 返回日期的天
1581
+ * 返回日期的天。
1582
+ *
1579
1583
  * @namespace 日期函数
1580
1584
  * @example DAY(date)
1581
1585
  * @param {date} date 日期对象
@@ -1586,7 +1590,8 @@ var Evaluator = /** @class */ (function () {
1586
1590
  return date.getDate();
1587
1591
  };
1588
1592
  /**
1589
- * 返回日期的小时
1593
+ * 返回日期的小时。
1594
+ *
1590
1595
  * @param {date} date 日期对象
1591
1596
  * @namespace 日期函数
1592
1597
  * @example HOUR(date)
@@ -1597,7 +1602,8 @@ var Evaluator = /** @class */ (function () {
1597
1602
  return date.getHours();
1598
1603
  };
1599
1604
  /**
1600
- * 返回日期的分
1605
+ * 返回日期的分。
1606
+ *
1601
1607
  * @param {date} date 日期对象
1602
1608
  * @namespace 日期函数
1603
1609
  * @example MINUTE(date)
@@ -1608,7 +1614,8 @@ var Evaluator = /** @class */ (function () {
1608
1614
  return date.getMinutes();
1609
1615
  };
1610
1616
  /**
1611
- * 返回日期的秒
1617
+ * 返回日期的秒。
1618
+ *
1612
1619
  * @param {date} date 日期对象
1613
1620
  * @namespace 日期函数
1614
1621
  * @example SECOND(date)
@@ -1619,7 +1626,8 @@ var Evaluator = /** @class */ (function () {
1619
1626
  return date.getSeconds();
1620
1627
  };
1621
1628
  /**
1622
- * 返回两个日期相差多少年
1629
+ * 返回两个日期相差多少年。
1630
+ *
1623
1631
  * @param {date} endDate 日期对象
1624
1632
  * @param {date} startDate 日期对象
1625
1633
  * @namespace 日期函数
@@ -1632,7 +1640,8 @@ var Evaluator = /** @class */ (function () {
1632
1640
  return moment(endDate).diff(moment(startDate), 'year');
1633
1641
  };
1634
1642
  /**
1635
- * 返回两个日期相差多少分钟
1643
+ * 返回两个日期相差多少分钟。
1644
+ *
1636
1645
  * @param {date} endDate 日期对象
1637
1646
  * @param {date} startDate 日期对象
1638
1647
  * @namespace 日期函数
@@ -1645,7 +1654,8 @@ var Evaluator = /** @class */ (function () {
1645
1654
  return moment(endDate).diff(moment(startDate), 'minutes');
1646
1655
  };
1647
1656
  /**
1648
- * 返回两个日期相差多少天
1657
+ * 返回两个日期相差多少天。
1658
+ *
1649
1659
  * @param {date} endDate 日期对象
1650
1660
  * @param {date} startDate 日期对象
1651
1661
  * @namespace 日期函数
@@ -1658,7 +1668,8 @@ var Evaluator = /** @class */ (function () {
1658
1668
  return moment(endDate).diff(moment(startDate), 'days');
1659
1669
  };
1660
1670
  /**
1661
- * 返回两个日期相差多少小时
1671
+ * 返回两个日期相差多少小时。
1672
+ *
1662
1673
  * @param {date} endDate 日期对象
1663
1674
  * @param {date} startDate 日期对象
1664
1675
  * @namespace 日期函数
@@ -1671,11 +1682,11 @@ var Evaluator = /** @class */ (function () {
1671
1682
  return moment(endDate).diff(moment(startDate), 'hour');
1672
1683
  };
1673
1684
  /**
1674
- * 修改日期,对日期进行加减天、月份、年等操作
1685
+ * 修改日期,对日期进行加减天、月份、年等操作。
1675
1686
  *
1676
1687
  * 示例:
1677
1688
  *
1678
- * DATEMODIFY(A, -2, 'month')
1689
+ * DATEMODIFY(A, -2, 'month')
1679
1690
  *
1680
1691
  * 对日期 A 进行往前减2月的操作。
1681
1692
  *
@@ -1706,7 +1717,7 @@ var Evaluator = /** @class */ (function () {
1706
1717
  return moment(value, format).toDate();
1707
1718
  };
1708
1719
  /**
1709
- * 判断两个日期,是否第一个日期在第二个日期的前面
1720
+ * 判断两个日期,是否第一个日期在第二个日期的前面,是则返回 true,否则返回 false。
1710
1721
  *
1711
1722
  * @param {date} a 第一个日期
1712
1723
  * @param {date} b 第二个日期
@@ -1722,7 +1733,7 @@ var Evaluator = /** @class */ (function () {
1722
1733
  return moment(a).isBefore(moment(b), unit);
1723
1734
  };
1724
1735
  /**
1725
- * 判断两个日期,是否第一个日期在第二个日期的后面
1736
+ * 判断两个日期,是否第一个日期在第二个日期的后面,是则返回 true,否则返回 false。
1726
1737
  *
1727
1738
  * @param {date} a 第一个日期
1728
1739
  * @param {date} b 第二个日期
@@ -1738,9 +1749,9 @@ var Evaluator = /** @class */ (function () {
1738
1749
  return moment(a).isAfter(moment(b), unit);
1739
1750
  };
1740
1751
  /**
1741
- * 判断日期是否在指定范围内
1752
+ * 判断日期是否在指定范围内,是则返回 true,否则返回 false。
1742
1753
  *
1743
- * 示例:BETWEENRANGE('2021/12/6', ['2021/12/5','2021/12/7'])
1754
+ * 示例:BETWEENRANGE('2021/12/6', ['2021/12/5','2021/12/7'])
1744
1755
  *
1745
1756
  * @param {any} date 第一个日期
1746
1757
  * @param {any[]} daterange 日期范围
@@ -1757,7 +1768,7 @@ var Evaluator = /** @class */ (function () {
1757
1768
  return moment(this.normalizeDate(date)).isBetween(range[0], range[1], unit, inclusivity);
1758
1769
  };
1759
1770
  /**
1760
- * 判断两个日期,是否第一个日期在第二个日期的前面或者相等
1771
+ * 判断两个日期,是否第一个日期在第二个日期的前面或者相等,是则返回 true,否则返回 false。
1761
1772
  *
1762
1773
  * @param {date} a 第一个日期
1763
1774
  * @param {date} b 第二个日期
@@ -1773,7 +1784,7 @@ var Evaluator = /** @class */ (function () {
1773
1784
  return moment(a).isSameOrBefore(moment(b), unit);
1774
1785
  };
1775
1786
  /**
1776
- * 判断两个日期,是否第一个日期在第二个日期的后面或者相等
1787
+ * 判断两个日期,是否第一个日期在第二个日期的后面或者相等,是则返回 true,否则返回 false。
1777
1788
  *
1778
1789
  * @param {date} a 第一个日期
1779
1790
  * @param {date} b 第二个日期
@@ -1789,7 +1800,7 @@ var Evaluator = /** @class */ (function () {
1789
1800
  return moment(a).isSameOrAfter(moment(b), unit);
1790
1801
  };
1791
1802
  /**
1792
- * 返回数组的长度
1803
+ * 返回数组的长度。
1793
1804
  *
1794
1805
  * @param {Array<any>} arr 数组
1795
1806
  * @namespace 数组
@@ -1842,7 +1853,7 @@ var Evaluator = /** @class */ (function () {
1842
1853
  *
1843
1854
  * 示例:
1844
1855
  *
1845
- * ARRAYFINDINDEX([0, 2, false], item => item === 2) 得到 1
1856
+ * ARRAYFINDINDEX([0, 2, false], item => item === 2) 得到 1
1846
1857
  *
1847
1858
  * @param {Array<any>} arr 数组
1848
1859
  * @param {Function<any>} iterator 箭头函数
@@ -1865,7 +1876,7 @@ var Evaluator = /** @class */ (function () {
1865
1876
  *
1866
1877
  * 示例:
1867
1878
  *
1868
- * ARRAYFIND([0, 2, false], item => item === 2) 得到 2
1879
+ * ARRAYFIND([0, 2, false], item => item === 2) 得到 2
1869
1880
  *
1870
1881
  * @param {Array<any>} arr 数组
1871
1882
  * @param {Function<any>} iterator 箭头函数
@@ -1884,11 +1895,11 @@ var Evaluator = /** @class */ (function () {
1884
1895
  };
1885
1896
  /**
1886
1897
  * 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1887
- * 判断第二个箭头函数是否存在返回为 true 的成员。
1898
+ * 判断第二个箭头函数是否存在返回为 true 的成员,是则返回 true,否则返回 false。
1888
1899
  *
1889
1900
  * 示例:
1890
1901
  *
1891
- * ARRAYSOME([0, 2, false], item => item === 2) 得到 true
1902
+ * ARRAYSOME([0, 2, false], item => item === 2) 得到 true
1892
1903
  *
1893
1904
  * @param {Array<any>} arr 数组
1894
1905
  * @param {Function<any>} iterator 箭头函数
@@ -1907,7 +1918,7 @@ var Evaluator = /** @class */ (function () {
1907
1918
  };
1908
1919
  /**
1909
1920
  * 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1910
- * 判断第二个箭头函数返回是否都为 true。
1921
+ * 判断第二个箭头函数返回是否都为 true,是则返回 true,否则返回 false
1911
1922
  *
1912
1923
  * 示例:
1913
1924
  *
@@ -1929,11 +1940,11 @@ var Evaluator = /** @class */ (function () {
1929
1940
  });
1930
1941
  };
1931
1942
  /**
1932
- * 判断数据中是否存在指定元素
1943
+ * 判断数据中是否存在指定元素。
1933
1944
  *
1934
1945
  * 示例:
1935
1946
  *
1936
- * ARRAYINCLUDES([0, 2, false], 2) 得到 true
1947
+ * ARRAYINCLUDES([0, 2, false], 2) 得到 true
1937
1948
  *
1938
1949
  * @param {Array<any>} arr 数组
1939
1950
  * @param {any} item 元素
@@ -1945,11 +1956,11 @@ var Evaluator = /** @class */ (function () {
1945
1956
  return (Array.isArray(arr) ? arr : []).includes(item);
1946
1957
  };
1947
1958
  /**
1948
- * 数组过滤掉 false、null、0 和 ""
1959
+ * 数组过滤掉 false、null、0 和 ""
1949
1960
  *
1950
1961
  * 示例:
1951
1962
  *
1952
- * COMPACT([0, 1, false, 2, '', 3]) 得到 [1, 2, 3]
1963
+ * COMPACT([0, 1, false, 2, '', 3]) 得到 [1, 2, 3]
1953
1964
  *
1954
1965
  * @param {Array<any>} arr 数组
1955
1966
  * @namespace 数组
@@ -1983,11 +1994,11 @@ var Evaluator = /** @class */ (function () {
1983
1994
  }
1984
1995
  };
1985
1996
  /**
1986
- * 数组转成字符串
1997
+ * 数组转成字符串。
1987
1998
  *
1988
1999
  * 示例:
1989
2000
  *
1990
- * JOIN(['a', 'b', 'c'], '=') 得到 'a=b=c'
2001
+ * JOIN(['a', 'b', 'c'], '=') 得到 'a=b=c'
1991
2002
  *
1992
2003
  * @param {Array<any>} arr 数组
1993
2004
  * @param { String} separator 分隔符
@@ -2005,11 +2016,11 @@ var Evaluator = /** @class */ (function () {
2005
2016
  }
2006
2017
  };
2007
2018
  /**
2008
- * 数组合并
2019
+ * 数组合并。
2009
2020
  *
2010
2021
  * 示例:
2011
2022
  *
2012
- * CONCAT(['a', 'b', 'c'], ['1'], ['3']) 得到 ['a', 'b', 'c', '1', '3']
2023
+ * CONCAT(['a', 'b', 'c'], ['1'], ['3']) 得到 ['a', 'b', 'c', '1', '3']
2013
2024
  *
2014
2025
  * @param {Array<any>} arr 数组
2015
2026
  * @namespace 数组
@@ -2027,11 +2038,11 @@ var Evaluator = /** @class */ (function () {
2027
2038
  return arr.reduce(function (a, b) { return a.concat(b); }, []).filter(function (item) { return item; });
2028
2039
  };
2029
2040
  /**
2030
- * 数组去重,第二个参数「field」,可指定根据该字段去重
2041
+ * 数组去重,第二个参数「field」,可指定根据该字段去重。
2031
2042
  *
2032
2043
  * 示例:
2033
2044
  *
2034
- * UNIQ([{a: '1'}, {b: '2'}, {a: '1'}], 'id')
2045
+ * UNIQ([{a: '1'}, {b: '2'}, {a: '1'}], 'id')
2035
2046
  *
2036
2047
  * @param {Array<any>} arr 数组
2037
2048
  * @param {string} field 字段
@@ -2044,11 +2055,11 @@ var Evaluator = /** @class */ (function () {
2044
2055
  return field ? uniqBy(arr, field) : uniqWith(arr, isEqual);
2045
2056
  };
2046
2057
  /**
2047
- * 将JS对象转换成JSON字符串
2058
+ * 将JS对象转换成JSON字符串。
2048
2059
  *
2049
2060
  * 示例:
2050
2061
  *
2051
- * ENCODEJSON({name: 'amis'}) 得到 '{"name":"amis"}'
2062
+ * ENCODEJSON({name: 'amis'}) 得到 '{"name":"amis"}'
2052
2063
  *
2053
2064
  * @param {object} obj JS对象
2054
2065
  * @namespace 编码
@@ -2059,11 +2070,11 @@ var Evaluator = /** @class */ (function () {
2059
2070
  return JSON.stringify(obj);
2060
2071
  };
2061
2072
  /**
2062
- * 解析JSON编码数据,返回JS对象
2073
+ * 解析JSON编码数据,返回JS对象。
2063
2074
  *
2064
2075
  * 示例:
2065
2076
  *
2066
- * DECODEJSON('{\"name\": "amis"}') 得到 {name: 'amis'}
2077
+ * DECODEJSON('{\"name\": "amis"}') 得到 {name: 'amis'}
2067
2078
  *
2068
2079
  * @param {string} str 字符串
2069
2080
  * @namespace 编码
@@ -2074,15 +2085,15 @@ var Evaluator = /** @class */ (function () {
2074
2085
  return JSON.parse(str);
2075
2086
  };
2076
2087
  /**
2077
- * 根据对象或者数组的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代
2088
+ * 根据对象或者数组的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代。
2078
2089
  *
2079
2090
  * 示例:
2080
2091
  *
2081
- * GET([0, 2, {name: 'amis', age: 18}], 1) 得到 2
2082
- * GET([0, 2, {name: 'amis', age: 18}], '2.name') 得到 'amis'
2083
- * GET({arr: [{name: 'amis', age: 18}]}, 'arr[0].name') 得到 'amis'
2084
- * GET({arr: [{name: 'amis', age: 18}]}, 'arr.0.name') 得到 'amis'
2085
- * GET({arr: [{name: 'amis', age: 18}]}, 'arr.1.name', 'not-found') 得到 'not-found'
2092
+ * GET([0, 2, {name: 'amis', age: 18}], 1) 得到 2
2093
+ * GET([0, 2, {name: 'amis', age: 18}], '2.name') 得到 'amis'
2094
+ * GET({arr: [{name: 'amis', age: 18}]}, 'arr[0].name') 得到 'amis'
2095
+ * GET({arr: [{name: 'amis', age: 18}]}, 'arr.0.name') 得到 'amis'
2096
+ * GET({arr: [{name: 'amis', age: 18}]}, 'arr.1.name', 'not-found') 得到 'not-found'
2086
2097
  *
2087
2098
  * @param {any} obj 对象或数组
2088
2099
  * @param {string} path 路径