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/doc.js +295 -6
- package/esm/doc.md +209 -4
- package/esm/evalutor.d.ts +202 -8
- package/esm/evalutor.js +347 -33
- package/esm/filter.js +1 -1
- package/esm/function.js +1 -1
- package/esm/index.js +1 -1
- package/esm/lexer.js +1 -1
- package/esm/parser.js +1 -1
- package/lib/doc.js +295 -6
- package/lib/doc.md +209 -4
- package/lib/evalutor.d.ts +202 -8
- package/lib/evalutor.js +347 -32
- package/lib/filter.js +1 -1
- package/lib/function.js +1 -1
- package/lib/index.js +1 -1
- package/lib/lexer.js +1 -1
- package/lib/parser.js +1 -1
- package/package.json +2 -2
package/esm/evalutor.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-formula v2.
|
|
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
|
-
|
|
726
|
-
var
|
|
727
|
-
|
|
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
|
-
|
|
758
|
-
var
|
|
759
|
-
|
|
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
|
-
|
|
788
|
-
var
|
|
789
|
-
|
|
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 {
|
|
1449
|
+
* @param {any} date 日期对象、日期字符串、时间戳
|
|
1376
1450
|
* @param {string} format 日期格式,默认为 "YYYY-MM-DD HH:mm:ss"
|
|
1377
1451
|
*
|
|
1378
|
-
* @returns {
|
|
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
|
-
|
|
1395
|
-
|
|
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
|
-
|
|
1408
|
-
|
|
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 === '
|
|
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
|
-
|
|
1710
|
-
var
|
|
1711
|
-
|
|
1712
|
-
|
|
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
package/esm/function.js
CHANGED
package/esm/index.js
CHANGED
package/esm/lexer.js
CHANGED
package/esm/parser.js
CHANGED