amis-formula 2.7.2 → 2.8.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,9 +1,9 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
6
- import { __assign } from 'tslib';
6
+ import { __assign, __values } from 'tslib';
7
7
  import moment from 'moment';
8
8
  import upperFirst from 'lodash/upperFirst';
9
9
  import padStart from 'lodash/padStart';
@@ -14,6 +14,7 @@ import uniqWith from 'lodash/uniqWith';
14
14
  import uniqBy from 'lodash/uniqBy';
15
15
  import isEqual from 'lodash/isEqual';
16
16
  import isPlainObject from 'lodash/isPlainObject';
17
+ import get from 'lodash/get';
17
18
 
18
19
  /**
19
20
  * @file 公式内置函数
@@ -709,6 +710,7 @@ var Evaluator = /** @class */ (function () {
709
710
  * @returns {number} 所有数值的平均值
710
711
  */
711
712
  Evaluator.prototype.fnDEVSQ = function () {
713
+ var e_1, _a;
712
714
  var _this = this;
713
715
  var args = [];
714
716
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -722,9 +724,18 @@ var Evaluator = /** @class */ (function () {
722
724
  var sum = nums.reduce(function (sum, a) { return sum + a || 0; }, 0);
723
725
  var mean = sum / nums.length;
724
726
  var result = 0;
725
- for (var _a = 0, nums_1 = nums; _a < nums_1.length; _a++) {
726
- var num = nums_1[_a];
727
- result += Math.pow(num - mean, 2);
727
+ try {
728
+ for (var nums_1 = __values(nums), nums_1_1 = nums_1.next(); !nums_1_1.done; nums_1_1 = nums_1.next()) {
729
+ var num = nums_1_1.value;
730
+ result += Math.pow(num - mean, 2);
731
+ }
732
+ }
733
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
734
+ finally {
735
+ try {
736
+ if (nums_1_1 && !nums_1_1.done && (_a = nums_1.return)) _a.call(nums_1);
737
+ }
738
+ finally { if (e_1) throw e_1.error; }
728
739
  }
729
740
  return result;
730
741
  };
@@ -738,6 +749,7 @@ var Evaluator = /** @class */ (function () {
738
749
  * @returns {number} 所有数值的平均值
739
750
  */
740
751
  Evaluator.prototype.fnAVEDEV = function () {
752
+ var e_2, _a;
741
753
  var _this = this;
742
754
  var args = [];
743
755
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -754,9 +766,18 @@ var Evaluator = /** @class */ (function () {
754
766
  var sum = nums.reduce(function (sum, a) { return sum + a || 0; }, 0);
755
767
  var mean = sum / nums.length;
756
768
  var result = 0;
757
- for (var _a = 0, nums_2 = nums; _a < nums_2.length; _a++) {
758
- var num = nums_2[_a];
759
- result += Math.abs(num - mean);
769
+ try {
770
+ for (var nums_2 = __values(nums), nums_2_1 = nums_2.next(); !nums_2_1.done; nums_2_1 = nums_2.next()) {
771
+ var num = nums_2_1.value;
772
+ result += Math.abs(num - mean);
773
+ }
774
+ }
775
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
776
+ finally {
777
+ try {
778
+ if (nums_2_1 && !nums_2_1.done && (_a = nums_2.return)) _a.call(nums_2);
779
+ }
780
+ finally { if (e_2) throw e_2.error; }
760
781
  }
761
782
  return result / nums.length;
762
783
  };
@@ -770,6 +791,7 @@ var Evaluator = /** @class */ (function () {
770
791
  * @returns {number} 所有数值的平均值
771
792
  */
772
793
  Evaluator.prototype.fnHARMEAN = function () {
794
+ var e_3, _a;
773
795
  var _this = this;
774
796
  var args = [];
775
797
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -784,9 +806,18 @@ var Evaluator = /** @class */ (function () {
784
806
  }
785
807
  var nums = arr.map(function (item) { return _this.formatNumber(item); });
786
808
  var den = 0;
787
- for (var _a = 0, nums_3 = nums; _a < nums_3.length; _a++) {
788
- var num = nums_3[_a];
789
- den += 1 / num;
809
+ try {
810
+ for (var nums_3 = __values(nums), nums_3_1 = nums_3.next(); !nums_3_1.done; nums_3_1 = nums_3.next()) {
811
+ var num = nums_3_1.value;
812
+ den += 1 / num;
813
+ }
814
+ }
815
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
816
+ finally {
817
+ try {
818
+ if (nums_3_1 && !nums_3_1.done && (_a = nums_3.return)) _a.call(nums_3);
819
+ }
820
+ finally { if (e_3) throw e_3.error; }
790
821
  }
791
822
  return nums.length / den;
792
823
  };
@@ -1342,7 +1373,7 @@ var Evaluator = /** @class */ (function () {
1342
1373
  * @returns {number} 时间戳
1343
1374
  */
1344
1375
  Evaluator.prototype.fnTIMESTAMP = function (date, format) {
1345
- return parseInt(moment(date).format(format === 'x' ? 'x' : 'X'), 10);
1376
+ return parseInt(moment(this.normalizeDate(date)).format(format === 'x' ? 'x' : 'X'), 10);
1346
1377
  };
1347
1378
  /**
1348
1379
  * 返回今天的日期
@@ -1367,20 +1398,106 @@ var Evaluator = /** @class */ (function () {
1367
1398
  return new Date();
1368
1399
  };
1369
1400
  /**
1370
- * 将日期转成日期字符串
1401
+ * 获取日期的星期几,
1402
+ *
1403
+ * 示例:
1404
+ *
1405
+ * WEEKDAY('2023-02-27') 得到 1
1406
+ *
1407
+ * @example WEEKDAY(date)
1408
+ * @namespace 日期函数
1409
+ * @param {any} date 日期
1410
+ * @param {number} type 星期定义类型,默认为1,1表示0至6代表星期一到星期日,2表示1至7代表星期一到星期日
1411
+ *
1412
+ * @returns {number} 星期几的数字标识
1413
+ */
1414
+ Evaluator.prototype.fnWEEKDAY = function (date, type) {
1415
+ var md = moment(this.normalizeDate(date));
1416
+ return type === 2 ? md.isoWeekday() : md.weekday();
1417
+ };
1418
+ /**
1419
+ * 获取年份的星期,即第几周
1420
+ *
1421
+ * 示例:
1422
+ *
1423
+ * WEEK('2023-03-05') 得到 10
1424
+ *
1425
+ * @example WEEK(date)
1426
+ * @namespace 日期函数
1427
+ * @param {any} date 日期
1428
+ * @param {boolean} isISO 是否ISO星期
1429
+ *
1430
+ * @returns {number} 星期几的数字标识
1431
+ */
1432
+ Evaluator.prototype.fnWEEK = function (date, isISO) {
1433
+ if (isISO === void 0) { isISO = false; }
1434
+ var md = moment(this.normalizeDate(date));
1435
+ return isISO ? md.isoWeek() : md.week();
1436
+ };
1437
+ /**
1438
+ * 对日期、日期字符串、时间戳进行格式化
1439
+ *
1440
+ * 示例:
1441
+ *
1442
+ * DATETOSTR('12/25/2022', 'YYYY-MM-DD') 得到 '2022.12.25'
1443
+ * DATETOSTR(1676563200, 'YYYY.MM.DD') 得到 '2023.02.17'
1444
+ * DATETOSTR(1676563200000, 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
1445
+ * DATETOSTR(DATE('2021-12-21'), 'YYYY.MM.DD hh:mm:ss') 得到 '2021.12.21 08:00:00'
1371
1446
  *
1372
- * @example DATETOSTR(date[, format="YYYY-MM-DD HH:mm:ss"])
1373
1447
  * @example DATETOSTR(date, 'YYYY-MM-DD')
1374
1448
  * @namespace 日期函数
1375
- * @param {date} date 日期对象
1449
+ * @param {any} date 日期对象、日期字符串、时间戳
1376
1450
  * @param {string} format 日期格式,默认为 "YYYY-MM-DD HH:mm:ss"
1377
1451
  *
1378
- * @returns {number} 日期字符串
1452
+ * @returns {string} 日期字符串
1379
1453
  */
1380
1454
  Evaluator.prototype.fnDATETOSTR = function (date, format) {
1381
1455
  if (format === void 0) { format = 'YYYY-MM-DD HH:mm:ss'; }
1456
+ date = this.normalizeDate(date);
1382
1457
  return moment(date).format(format);
1383
1458
  };
1459
+ /**
1460
+ * 获取日期范围字符串中的开始时间、结束时间
1461
+ *
1462
+ * 示例:
1463
+ *
1464
+ * DATERANGESPLIT('1676563200, 1676735999') 得到 [1676563200, 1676735999]
1465
+ * DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 [2023.02.17 12:00:00, 2023.02.18 11:59:59]
1466
+ * DATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
1467
+ * DATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
1468
+ * DATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'
1469
+ * DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'
1470
+ *
1471
+ * @example DATERANGESPLIT(date, 'YYYY-MM-DD')
1472
+ * @namespace 日期函数
1473
+ * @param {string} date 日期范围字符串
1474
+ * @param {string} key 取值标识,0或'start'表示获取开始时间,1或'end'表示获取结束时间
1475
+ * @param {string} format 日期格式,可选
1476
+ * @param {string} delimiter 分隔符,可选,默认为','
1477
+ *
1478
+ * @returns {string} 日期字符串
1479
+ */
1480
+ Evaluator.prototype.fnDATERANGESPLIT = function (daterange, key, format, delimiter) {
1481
+ var _this = this;
1482
+ if (delimiter === void 0) { delimiter = ','; }
1483
+ if (!daterange || typeof daterange !== 'string') {
1484
+ return daterange;
1485
+ }
1486
+ var dateArr = daterange
1487
+ .split(delimiter)
1488
+ .map(function (item) {
1489
+ return item && format
1490
+ ? moment(_this.normalizeDate(item.trim())).format(format)
1491
+ : item.trim();
1492
+ });
1493
+ if ([0, '0', 'start'].includes(key)) {
1494
+ return dateArr[0];
1495
+ }
1496
+ if ([1, '1', 'end'].includes(key)) {
1497
+ return dateArr[1];
1498
+ }
1499
+ return dateArr;
1500
+ };
1384
1501
  /**
1385
1502
  * 返回日期的指定范围的开端
1386
1503
  *
@@ -1388,12 +1505,12 @@ var Evaluator = /** @class */ (function () {
1388
1505
  * @example STARTOF(date[unit = "day"])
1389
1506
  * @param {date} date 日期对象
1390
1507
  * @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
1508
+ * @param {string} format 日期格式,可选
1391
1509
  * @returns {date} 新的日期对象
1392
1510
  */
1393
- Evaluator.prototype.fnSTARTOF = function (date, unit) {
1394
- return moment(date)
1395
- .startOf(unit || 'day')
1396
- .toDate();
1511
+ Evaluator.prototype.fnSTARTOF = function (date, unit, format) {
1512
+ var md = moment(this.normalizeDate(date)).startOf(unit || 'day');
1513
+ return format ? md.format(format) : md.toDate();
1397
1514
  };
1398
1515
  /**
1399
1516
  * 返回日期的指定范围的末尾
@@ -1401,19 +1518,22 @@ var Evaluator = /** @class */ (function () {
1401
1518
  * @example ENDOF(date[unit = "day"])
1402
1519
  * @param {date} date 日期对象
1403
1520
  * @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
1521
+ * @param {string} format 日期格式,可选
1404
1522
  * @returns {date} 新的日期对象
1405
1523
  */
1406
- Evaluator.prototype.fnENDOF = function (date, unit) {
1407
- return moment(date)
1408
- .endOf(unit || 'day')
1409
- .toDate();
1524
+ Evaluator.prototype.fnENDOF = function (date, unit, format) {
1525
+ var md = moment(this.normalizeDate(date)).endOf(unit || 'day');
1526
+ return format ? md.format(format) : md.toDate();
1410
1527
  };
1411
1528
  Evaluator.prototype.normalizeDate = function (raw) {
1412
- if (typeof raw === 'number' || !isNaN(raw)) {
1413
- return new Date(Number(raw));
1414
- }
1415
- if (typeof raw === 'string') {
1529
+ if (typeof raw === 'string' || typeof raw === 'number') {
1416
1530
  var formats = ['', 'YYYY-MM-DD HH:mm:ss', 'X'];
1531
+ if (/^\d{10}((\.\d+)*)$/.test(raw.toString())) {
1532
+ formats = ['X', 'x', 'YYYY-MM-DD HH:mm:ss', ''];
1533
+ }
1534
+ else if (/^\d{13}((\.\d+)*)$/.test(raw.toString())) {
1535
+ formats = ['x', 'X', 'YYYY-MM-DD HH:mm:ss', ''];
1536
+ }
1417
1537
  while (formats.length) {
1418
1538
  var format = formats.shift();
1419
1539
  var date = moment(raw, format);
@@ -1424,6 +1544,12 @@ var Evaluator = /** @class */ (function () {
1424
1544
  }
1425
1545
  return raw;
1426
1546
  };
1547
+ Evaluator.prototype.normalizeDateRange = function (raw) {
1548
+ var _this = this;
1549
+ return (Array.isArray(raw) ? raw : raw.split(',')).map(function (item) {
1550
+ return _this.normalizeDate(String(item).trim());
1551
+ });
1552
+ };
1427
1553
  /**
1428
1554
  * 返回日期的年份
1429
1555
  * @namespace 日期函数
@@ -1610,6 +1736,25 @@ var Evaluator = /** @class */ (function () {
1610
1736
  b = this.normalizeDate(b);
1611
1737
  return moment(a).isAfter(moment(b), unit);
1612
1738
  };
1739
+ /**
1740
+ * 判断日期是否在指定范围内
1741
+ *
1742
+ * 示例:BETWEENRANGE('2021/12/6', ['2021/12/5','2021/12/7'])
1743
+ *
1744
+ * @param {any} date 第一个日期
1745
+ * @param {any[]} daterange 日期范围
1746
+ * @param {string} unit 单位,默认是 'day', 即之比较到天
1747
+ * @param {string} inclusivity 包容性规则,默认为'[]'。[ 表示包含、( 表示排除,如果使用包容性参数,则必须传入两个指示符,如'()'表示左右范围都排除
1748
+ * @namespace 日期函数
1749
+ * @example BETWEENRANGE(date, [start, end])
1750
+ * @returns {boolean} 判断结果
1751
+ */
1752
+ Evaluator.prototype.fnBETWEENRANGE = function (date, daterange, unit, inclusivity) {
1753
+ if (unit === void 0) { unit = 'day'; }
1754
+ if (inclusivity === void 0) { inclusivity = '[]'; }
1755
+ var range = this.normalizeDateRange(daterange);
1756
+ return moment(this.normalizeDate(date)).isBetween(range[0], range[1], unit, inclusivity);
1757
+ };
1613
1758
  /**
1614
1759
  * 判断两个日期,是否第一个日期在第二个日期的前面或者相等
1615
1760
  *
@@ -1690,6 +1835,114 @@ var Evaluator = /** @class */ (function () {
1690
1835
  return _this.callAnonymousFunction(iterator, [item, index, arr]);
1691
1836
  });
1692
1837
  };
1838
+ /**
1839
+ * 数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1840
+ * 找出第二个箭头函数返回为 true 的成员的索引。
1841
+ *
1842
+ * 示例:
1843
+ *
1844
+ * ARRAYFINDINDEX([0, 2, false], item => item === 2) 得到 1
1845
+ *
1846
+ * @param {Array<any>} arr 数组
1847
+ * @param {Function<any>} iterator 箭头函数
1848
+ * @namespace 数组
1849
+ * @example ARRAYFINDINDEX(arr, item => item === 2)
1850
+ * @returns {number} 结果
1851
+ */
1852
+ Evaluator.prototype.fnARRAYFINDINDEX = function (arr, iterator) {
1853
+ var _this = this;
1854
+ if (!iterator || iterator.type !== 'anonymous_function') {
1855
+ throw new Error('expected an anonymous function get ' + iterator);
1856
+ }
1857
+ return (Array.isArray(arr) ? arr : []).findIndex(function (item, index, arr) {
1858
+ return _this.callAnonymousFunction(iterator, [item, index, arr]);
1859
+ });
1860
+ };
1861
+ /**
1862
+ * 数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1863
+ * 找出第二个箭头函数返回为 true 的成员。
1864
+ *
1865
+ * 示例:
1866
+ *
1867
+ * ARRAYFIND([0, 2, false], item => item === 2) 得到 2
1868
+ *
1869
+ * @param {Array<any>} arr 数组
1870
+ * @param {Function<any>} iterator 箭头函数
1871
+ * @namespace 数组
1872
+ * @example ARRAYFIND(arr, item => item === 2)
1873
+ * @returns {any} 结果
1874
+ */
1875
+ Evaluator.prototype.fnARRAYFIND = function (arr, iterator) {
1876
+ var _this = this;
1877
+ if (!iterator || iterator.type !== 'anonymous_function') {
1878
+ throw new Error('expected an anonymous function get ' + iterator);
1879
+ }
1880
+ return (Array.isArray(arr) ? arr : []).find(function (item, index, arr) {
1881
+ return _this.callAnonymousFunction(iterator, [item, index, arr]);
1882
+ });
1883
+ };
1884
+ /**
1885
+ * 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1886
+ * 判断第二个箭头函数是否存在返回为 true 的成员。
1887
+ *
1888
+ * 示例:
1889
+ *
1890
+ * ARRAYSOME([0, 2, false], item => item === 2) 得到 true
1891
+ *
1892
+ * @param {Array<any>} arr 数组
1893
+ * @param {Function<any>} iterator 箭头函数
1894
+ * @namespace 数组
1895
+ * @example ARRAYSOME(arr, item => item === 2)
1896
+ * @returns {boolean} 结果
1897
+ */
1898
+ Evaluator.prototype.fnARRAYSOME = function (arr, iterator) {
1899
+ var _this = this;
1900
+ if (!iterator || iterator.type !== 'anonymous_function') {
1901
+ throw new Error('expected an anonymous function get ' + iterator);
1902
+ }
1903
+ return (Array.isArray(arr) ? arr : []).some(function (item, index, arr) {
1904
+ return _this.callAnonymousFunction(iterator, [item, index, arr]);
1905
+ });
1906
+ };
1907
+ /**
1908
+ * 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1909
+ * 判断第二个箭头函数返回是否都为 true。
1910
+ *
1911
+ * 示例:
1912
+ *
1913
+ * ARRAYEVERY([0, 2, false], item => item === 2) 得到 false
1914
+ *
1915
+ * @param {Array<any>} arr 数组
1916
+ * @param {Function<any>} iterator 箭头函数
1917
+ * @namespace 数组
1918
+ * @example ARRAYEVERY(arr, item => item === 2)
1919
+ * @returns {boolean} 结果
1920
+ */
1921
+ Evaluator.prototype.fnARRAYEVERY = function (arr, iterator) {
1922
+ var _this = this;
1923
+ if (!iterator || iterator.type !== 'anonymous_function') {
1924
+ throw new Error('expected an anonymous function get ' + iterator);
1925
+ }
1926
+ return (Array.isArray(arr) ? arr : []).every(function (item, index, arr) {
1927
+ return _this.callAnonymousFunction(iterator, [item, index, arr]);
1928
+ });
1929
+ };
1930
+ /**
1931
+ * 判断数据中是否存在指定元素
1932
+ *
1933
+ * 示例:
1934
+ *
1935
+ * ARRAYINCLUDES([0, 2, false], 2) 得到 true
1936
+ *
1937
+ * @param {Array<any>} arr 数组
1938
+ * @param {any} item 元素
1939
+ * @namespace 数组
1940
+ * @example ARRAYINCLUDES(arr, 2)
1941
+ * @returns {any} 结果
1942
+ */
1943
+ Evaluator.prototype.fnARRAYINCLUDES = function (arr, item) {
1944
+ return (Array.isArray(arr) ? arr : []).includes(item);
1945
+ };
1693
1946
  /**
1694
1947
  * 数组过滤掉 false、null、0 和 ""
1695
1948
  *
@@ -1703,14 +1956,24 @@ var Evaluator = /** @class */ (function () {
1703
1956
  * @returns {Array<any>} 结果
1704
1957
  */
1705
1958
  Evaluator.prototype.fnCOMPACT = function (arr) {
1959
+ var e_4, _a;
1706
1960
  if (Array.isArray(arr)) {
1707
1961
  var resIndex = 0;
1708
1962
  var result = [];
1709
- for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {
1710
- var item = arr_1[_i];
1711
- if (item) {
1712
- result[resIndex++] = item;
1963
+ try {
1964
+ for (var arr_1 = __values(arr), arr_1_1 = arr_1.next(); !arr_1_1.done; arr_1_1 = arr_1.next()) {
1965
+ var item = arr_1_1.value;
1966
+ if (item) {
1967
+ result[resIndex++] = item;
1968
+ }
1969
+ }
1970
+ }
1971
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
1972
+ finally {
1973
+ try {
1974
+ if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) _a.call(arr_1);
1713
1975
  }
1976
+ finally { if (e_4) throw e_4.error; }
1714
1977
  }
1715
1978
  return result;
1716
1979
  }
@@ -1779,13 +2042,64 @@ var Evaluator = /** @class */ (function () {
1779
2042
  Evaluator.prototype.fnUNIQ = function (arr, field) {
1780
2043
  return field ? uniqBy(arr, field) : uniqWith(arr, isEqual);
1781
2044
  };
2045
+ /**
2046
+ * 将JS对象转换成JSON字符串
2047
+ *
2048
+ * 示例:
2049
+ *
2050
+ * ENCODEJSON({name: 'amis'}) 得到 '{"name":"amis"}'
2051
+ *
2052
+ * @param {object} obj JS对象
2053
+ * @namespace 编码
2054
+ * @example ENCODEJSON({name: 'amis'})
2055
+ * @returns {string} 结果
2056
+ */
2057
+ Evaluator.prototype.fnENCODEJSON = function (obj) {
2058
+ return JSON.stringify(obj);
2059
+ };
2060
+ /**
2061
+ * 解析JSON编码数据,返回JS对象
2062
+ *
2063
+ * 示例:
2064
+ *
2065
+ * DECODEJSON('{\"name\": "amis"}') 得到 {name: 'amis'}
2066
+ *
2067
+ * @param {string} str 字符串
2068
+ * @namespace 编码
2069
+ * @example DECODEJSON('{\"name\": "amis"}')
2070
+ * @returns {object} 结果
2071
+ */
2072
+ Evaluator.prototype.fnDECODEJSON = function (str) {
2073
+ return JSON.parse(str);
2074
+ };
2075
+ /**
2076
+ * 根据对象或者数组的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代
2077
+ *
2078
+ * 示例:
2079
+ *
2080
+ * GET([0, 2, {name: 'amis', age: 18}], 1) 得到 2
2081
+ * GET([0, 2, {name: 'amis', age: 18}], '2.name') 得到 'amis'
2082
+ * GET({arr: [{name: 'amis', age: 18}]}, 'arr[0].name') 得到 'amis'
2083
+ * GET({arr: [{name: 'amis', age: 18}]}, 'arr.0.name') 得到 'amis'
2084
+ * GET({arr: [{name: 'amis', age: 18}]}, 'arr.1.name', 'not-found') 得到 'not-found'
2085
+ *
2086
+ * @param {any} obj 对象或数组
2087
+ * @param {string} path 路径
2088
+ * @param {any} defaultValue 如果解析不到则返回该值
2089
+ * @namespace 其他
2090
+ * @example GET(arr, 2)
2091
+ * @returns {any} 结果
2092
+ */
2093
+ Evaluator.prototype.fnGET = function (obj, path, defaultValue) {
2094
+ return get(obj, path, defaultValue);
2095
+ };
1782
2096
  /**
1783
2097
  * 判断是否为类型支持:string, number, array, date, plain-object。
1784
2098
  *
1785
2099
  * @param {string} 判断对象
1786
2100
  * @namespace 其他
1787
2101
  * @example ISTYPE([{a: '1'}, {b: '2'}, {a: '1'}], 'array')
1788
- * @returns {boolean} 结果结果
2102
+ * @returns {boolean} 结果
1789
2103
  */
1790
2104
  Evaluator.prototype.fnISTYPE = function (target, type) {
1791
2105
  switch (type) {
package/esm/filter.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/function.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/lexer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/parser.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5