UNPKG

jamis-formula

Version:

负责 amis 里面的表达式实现,内置公式,编辑器等

1,320 lines (717 loc) 28.8 kB
## 逻辑函数 ### `IF` 用法:`IF(condition, consequent, alternate)` * `condition:expression` 条件表达式。例如:语文成绩>80 * `consequent:any` 条件判断通过的返回结果 * `alternate:any` 条件判断不通过的返回结果 返回:`any` 根据条件返回不同的结果 如果满足条件condition,则返回consequent,否则返回alternate,支持多层嵌套IF函数。 等价于直接用JS表达式如:condition ? consequent : alternate。 ### `AND` 用法:`AND(expression1, expression2, ...expressionN)` * `conditions:...expression` 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80 返回:`boolean` 条件全部符合,返回 true,否则返回 false。 示例:AND(语文成绩>80, 数学成绩>80), 语文成绩和数学成绩都大于 80,则返回 true,否则返回 false, 等价于直接用JS表达式如:语文成绩>80 && 数学成绩>80。 ### `OR` 用法:`OR(expression1, expression2, ...expressionN)` * `conditions:...expression` 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80 返回:`boolean` 条件任意一个满足条件,返回 true,否则返回 false。 示例:OR(语文成绩>80, 数学成绩>80), 语文成绩和数学成绩任意一个大于 80,则返回 true,否则返回 false, 等价于直接用JS表达式如:语文成绩>80 || 数学成绩>80。 ### `XOR` 用法:`XOR(condition1, condition2, ...expressionN)` * `condition:...expression` 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80 返回:`boolean` 异或处理,多个表达式组中存在奇数个真时认为真。 示例:XOR(语文成绩 > 80, 数学成绩 > 80, 英语成绩 > 80) 三门成绩中有一门或者三门大于 80,则返回 true,否则返回 false。 ### `IFS` 用法:`IFS(condition1, result1, condition2, result2,...conditionN, resultN)` * `condition:...expression` 条件表达式 * `result:...any` 返回值 返回:`any` 第一个满足条件的结果,没有命中的返回 false。 判断函数集合,相当于多个 else if 合并成一个。 示例:IFS(语文成绩 > 80, "优秀", 语文成绩 > 60, "良", "继续努力"), 如果语文成绩大于 80,则返回优秀,否则判断大于 60 分,则返回良,否则返回继续努力。 ## 数学函数 ### `ABS` 用法:`ABS(num)` * `num:number` 数值 返回:`number` 传入数值的绝对值 返回传入数字的绝对值。 ### `MAX` 用法:`MAX(num1, num2, ...numN)` * `num:...number` 数值 返回:`number` 所有传入值中最大的那个 获取最大值,如果只有一个参数且是数组,则计算这个数组内的值。 ### `MIN` 用法:`MIN(num1, num2, ...numN)` * `num:...number` 数值 返回:`number` 所有传入值中最小的那个 获取最小值,如果只有一个参数且是数组,则计算这个数组内的值。 ### `SUM` 用法:`SUM(num1, num2, ...numN)` * `num:...number` 数值 返回:`number` 所有传入数值的总和 求和,如果只有一个参数且是数组,则计算这个数组内的值。 ### `INT` 用法:`INT(num)` * `num:number` 数值 返回:`number` 数值对应的整形 将数值向下取整为最接近的整数。 ### `MOD` 用法:`MOD(num, divisor)` * `num:number` 被除数 * `divisor:number` 除数 返回:`number` 两数相除的余数 返回两数相除的余数,参数 number 是被除数,divisor 是除数。 ### `PI` 用法:`PI()` 圆周率 3.1415...。 ### `ROUND` 用法:`ROUND(num[, numDigits = 2])` * `num:number` 要处理的数字 * `numDigits:number` 小数位数 返回:`number` 传入数值四舍五入后的结果 将数字四舍五入到指定的位数,可以设置小数位。 ### `FLOOR` 用法:`FLOOR(num[, numDigits=2])` * `num:number` 要处理的数字 * `numDigits:number` 小数位数 返回:`number` 传入数值向下取整后的结果 将数字向下取整到指定的位数,可以设置小数位。 ### `CEIL` 用法:`CEIL(num[, numDigits=2])` * `num:number` 要处理的数字 * `numDigits:number` 小数位数 返回:`number` 传入数值向上取整后的结果 将数字向上取整到指定的位数,可以设置小数位。 ### `SQRT` 用法:`SQRT(num)` * `num:number` 要处理的数字 返回:`number` 开平方的结果 开平方,参数 number 为非负数 ### `AVG` 用法:`AVG(num1, num2, ...numN)` * `num:...number` 要处理的数字 返回:`number` 所有数值的平均值 返回所有参数的平均值,如果只有一个参数且是数组,则计算这个数组内的值。 ### `DEVSQ` 用法:`DEVSQ(num1, num2, ...numN)` * `num:...number` 要处理的数字 返回:`number` 所有数值的平均值 返回数据点与数据均值点之差(数据偏差)的平方和,如果只有一个参数且是数组,则计算这个数组内的值。 ### `AVEDEV` 用法:`AVEDEV(num1, num2, ...numN)` * `num:...number` 要处理的数字 返回:`number` 所有数值的平均值 数据点到其算术平均值的绝对偏差的平均值。 ### `HARMEAN` 用法:`HARMEAN(num1, num2, ...numN)` * `num:...number` 要处理的数字 返回:`number` 所有数值的平均值 数据点的调和平均值,如果只有一个参数且是数组,则计算这个数组内的值。 ### `LARGE` 用法:`LARGE(array, k)` * `nums:array` 要处理的数字 * `k:number` 第几大 返回:`number` 所有数值的平均值 数据集中第 k 个最大值。 ### `UPPERMONEY` 用法:`UPPERMONEY(num)` * `num:number` 要处理的数字 返回:`string` 数值中文大写字符 将数值转为中文大写金额。 ### `RAND` 用法:`RAND()` 返回大于等于 0 且小于 1 的均匀分布随机实数。每一次触发计算都会变化。 示例:`RAND()*100`, 返回 0-100 之间的随机数。 ### `LAST` 用法:`LAST(array)` * `arr:...number` 要处理的数组 返回:`any` 最后一个值 取数据最后一个。 ### `POW` 用法:`POW(base, exponent)` * `base:number` 基数 * `exponent:number` 指数 返回:`number` 基数的指数次幂 返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。 ## 文本函数 ### `LEFT` 用法:`LEFT(text, len)` * `text:string` 要处理的文本 * `len:number` 要处理的长度 返回:`string` 对应字符串 返回传入文本左侧的指定长度字符串。 ### `RIGHT` 用法:`RIGHT(text, len)` * `text:string` 要处理的文本 * `len:number` 要处理的长度 返回:`string` 对应字符串 返回传入文本右侧的指定长度字符串。 ### `LEN` 用法:`LEN(text)` * `text:string` 要处理的文本 返回:`number` 长度 计算文本的长度。 ### `LENGTH` 用法:`LENGTH(textArr)` * `textArr:Array<string>` 要处理的文本集合 返回:`Array<number>` 长度集合 计算文本集合中所有文本的长度。 ### `ISEMPTY` 用法:`ISEMPTY(text)` * `text:string` 要处理的文本 返回:`boolean` 判断结果 判断文本是否为空。 ### `CONCATENATE` 用法:`CONCATENATE(text1, text2, ...textN)` * `text:...string` 文本集合 返回:`string` 连接后的文本 将多个传入值连接成文本。 ### `CHAR` 用法:`CHAR(code)` * `code:number` 编码值 返回:`string` 指定位置的字符 返回计算机字符集的数字代码所对应的字符。 示例:`CHAR(97)` 等价于 "a"。 ### `LOWER` 用法:`LOWER(text)` * `text:string` 文本 返回:`string` 结果文本 将传入文本转成小写。 ### `UPPER` 用法:`UPPER(text)` * `text:string` 文本 返回:`string` 结果文本 将传入文本转成大写。 ### `UPPERFIRST` 用法:`UPPERFIRST(text)` * `text:string` 文本 返回:`string` 结果文本 将传入文本首字母转成大写。 ### `PADSTART` 用法:`PADSTART(text)` * `text:string` 文本 * `num:number` 目标长度 * `pad:string` 用于补齐的文本 返回:`string` 结果文本 向前补齐文本长度。 示例 `PADSTART("6", 2, "0")`, 返回 `06`### `CAPITALIZE` 用法:`CAPITALIZE(text)` * `text:string` 文本 返回:`string` 结果文本 将文本转成标题。 示例 `CAPITALIZE("star")`, 返回 `Star`### `ESCAPE` 用法:`ESCAPE(text)` * `text:string` 文本 返回:`string` 结果文本 对文本进行 HTML 转义。 示例 `ESCAPE("<star>&")`, 返回 `&lt;start&gt;&amp;`### `TRUNCATE` 用法:`TRUNCATE(text, 6)` * `text:string` 文本 * `text:number` 最长长度 返回:`string` 结果文本 对文本长度进行截断。 示例 `TRUNCATE("amis.baidu.com", 6)`, 返回 `amis...`### `BEFORELAST` 用法:`BEFORELAST(text, '.')` * `text:string` 文本 * `delimiter:string` 结束文本 返回:`string` 判断结果 取在某个分隔符之前的所有字符串。 ### `SPLIT` 用法:`SPLIT(text, ',')` * `text:string` 文本 * `delimiter:string` 文本片段 返回:`Array<string>` 文本集 将文本根据指定片段分割成数组。 示例:`SPLIT("a,b,c", ",")`, 返回 `["a", "b", "c"]`### `TRIM` 用法:`TRIM(text)` * `text:string` 文本 返回:`string` 处理后的文本 将文本去除前后空格。 ### `STRIPTAG` 用法:`STRIPTAG(text)` * `text:string` 文本 返回:`string` 处理后的文本 去除文本中的 HTML 标签。 示例:`STRIPTAG("<b>amis</b>")`, 返回:`amis`### `LINEBREAK` 用法:`LINEBREAK(text)` * `text:string` 文本 返回:`string` 处理后的文本 将字符串中的换行转成 HTML `<br>`,用于简单换行的场景。 示例:`LINEBREAK("\n")`, 返回:`<br/>`### `STARTSWITH` 用法:`STARTSWITH(text, '片段')` * `text:string` 文本 * `startString:string` 起始文本 返回:`string` 判断结果 判断字符串(text)是否以特定字符串(startString)开始,是则返回 true,否则返回 false。 ### `ENDSWITH` 用法:`ENDSWITH(text, '片段')` * `text:string` 文本 * `endString:string` 结束文本 返回:`string` 判断结果 判断字符串(text)是否以特定字符串(endString)结束,是则返回 true,否则返回 false。 ### `CONTAINS` 用法:`CONTAINS(text, searchText)` * `text:undefined` 文本 * `search:string` 用来搜索的文本, 如果是以^开头或$结尾, 则识别成正则 * `ignoreCase:ignoreCase` 是否忽略大小写, 默认是false 返回:`boolean` 判断结果 判断参数 1 中的文本是否包含参数 2 中的文本,是则返回 true,否则返回 false。 ### `REPLACE` 用法:`REPLACE(text, search, replace)` * `text:string` 要处理的文本 * `search:string` 用来搜索的文本, 如果是以^开头或$结尾, 则识别成正则, 默认忽略大小写 * `replace:string` 要替换的文本 返回:`string` 处理结果 对文本进行全量替换。 ### `SEARCH` 用法:`SEARCH(text, search, 0)` * `text:string` 要处理的文本 * `search:string` 用来搜索的文本, 如果是以^开头或$结尾, 则识别成正则, 默认忽略大小写 * `start:number` 起始位置 返回:`number` 命中的位置 对文本进行搜索,返回命中的位置。 ### `MID` 用法:`MID(text, from, len)` * `text:string` 要处理的文本 * `from:number` 起始位置 * `len:number` 处理长度 返回:`number` 命中的位置 返回文本字符串中从指定位置开始的特定数目的字符。 ### `BASENAME` 用法:`BASENAME(text)` * `text:string` 要处理的文本 返回:`string` 文件名 返回路径中的文件名。 示例:`/home/amis/a.json`, 返回:a.json`。 ### `UUID` 用法:`UUID(8)` * `length:number` 生成的UUID字符串长度,默认为32位 返回:`string` 生成的UUID字符串 生成UUID字符串 ### `FILESIZE` 用法:`FILESIZE(65535)` * `bytes:number` Number of bytes. * `si:boolean` True to use metric (SI) units, aka powers of 1000. False to use binary (IEC), aka powers of 1024. default is false. * `dp:number` 显示小数点位数. 默认是1位. 将数值型的文件大小参数格式化成更可读的字符串形式 ## 日期函数 ### `DATE` 用法:`DATE('2021-12-06 08:20:00')` 创建日期对象,可以通过特定格式的字符串,或者数值。 需要注意的是,其中月份的数值是从0开始的, 即如果是12月份,你应该传入数值11。 ### `TIMESTAMP` 用法:`TIMESTAMP(date[, format = "X"])` * `date:date` 日期对象 * `format:string` 时间戳格式,带毫秒传入 'x'。默认为 'X' 不带毫秒的。 返回:`number` 时间戳 返回时间的时间戳。 ### `TODAY` 用法:`TODAY()` 返回今天的日期。 ### `NOW` 用法:`NOW()` 返回现在的日期 ### `WEEKDAY` 用法:`WEEKDAY(date)` * `date:any` 日期 * `type:number` 星期定义类型,默认为1,1表示0至6代表星期一到星期日,2表示1至7代表星期一到星期日 返回:`number` 星期几的数字标识 获取日期的星期几。 示例 WEEKDAY('2023-02-27') 得到 0。 WEEKDAY('2023-02-27', 2) 得到 1。 ### `WEEK` 用法:`WEEK(date)` * `date:any` 日期 * `isISO:boolean` 是否ISO星期 返回:`number` 星期几的数字标识 获取年份的星期,即第几周。 示例 WEEK('2023-03-05') 得到 9。 ### `DATETOSTR` 用法:`DATETOSTR(date, 'YYYY-MM-DD')` * `date:any` 日期对象、日期字符串、时间戳 * `format:string` 日期格式,默认为 "YYYY-MM-DD HH:mm:ss" 返回:`string` 日期字符串 对日期、日期字符串、时间戳进行格式化。 示例 DATETOSTR('12/25/2022', 'YYYY-MM-DD') 得到 '2022.12.25', DATETOSTR(1676563200, 'YYYY.MM.DD') 得到 '2023.02.17', DATETOSTR(1676563200000, 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00', DATETOSTR(DATE('2021-12-21'), 'YYYY.MM.DD hh:mm:ss') 得到 '2021.12.21 08:00:00'。 ### `DATERANGESPLIT` 用法:`DATERANGESPLIT(date, 'YYYY-MM-DD')` * `date:string` 日期范围字符串 * `key:string` 取值标识,0或'start'表示获取开始时间,1或'end'表示获取结束时间 * `format:string` 日期格式,可选 * `delimiter:string` 分隔符,可选,默认为',' 返回:`string` 日期字符串 获取日期范围字符串中的开始时间、结束时间。 示例: DATERANGESPLIT('1676563200, 1676735999') 得到 [1676563200, 1676735999], DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 [2023.02.17 12:00:00, 2023.02.18 11:59:59], DATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00', DATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00', DATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59', DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'。 ### `STARTOF` 用法:`STARTOF(date[unit = "day"])` * `date:date` 日期对象 * `unit:string` 比如可以传入 'day'、'month'、'year' 或者 `week` 等等 * `format:string` 日期格式,可选 返回:`date` 新的日期对象 返回日期的指定范围的开端。 ### `ENDOF` 用法:`ENDOF(date[unit = "day"])` * `date:date` 日期对象 * `unit:string` 比如可以传入 'day'、'month'、'year' 或者 `week` 等等 * `format:string` 日期格式,可选 返回:`date` 新的日期对象 返回日期的指定范围的末尾。 ### `RELATIVETIME` 用法:`RELATIVETIME('2023-10-20T12:00:00Z', '2023-10-30T12:00:00Z') // 返回`10 天内`` * `from:undefined` 被比较的日期时间, 可以是日期/字符串/数值类型 * `to:undefined` 比较的日期时间, 不传时为当前时间, 类型可以是日期/字符串/数字 返回:`string` 相关时间描述 返回日期的相关时间描述, 比如`5 天前`, `10 天内`, 默认适配了多语言 ### `YEAR` 用法:`YEAR(date)` * `date:date` 日期对象 返回:`number` 数值 返回日期的年份。 ### `MONTH` 用法:`MONTH(date)` * `date:date` 日期对象 返回:`number` 数值 返回日期的月份,这里就是自然月份。 ### `DAY` 用法:`DAY(date)` * `date:date` 日期对象 返回:`number` 数值 返回日期的天。 ### `HOUR` 用法:`HOUR(date)` * `date:date` 日期对象 返回:`number` 数值 返回日期的小时。 ### `MINUTE` 用法:`MINUTE(date)` * `date:date` 日期对象 返回:`number` 数值 返回日期的分。 ### `SECOND` 用法:`SECOND(date)` * `date:date` 日期对象 返回:`number` 数值 返回日期的秒。 ### `YEARS` 用法:`YEARS(endDate, startDate)` * `endDate:date` 日期对象 * `startDate:date` 日期对象 返回:`number` 数值 返回两个日期相差多少年。 ### `MINUTES` 用法:`MINUTES(endDate, startDate)` * `endDate:date` 日期对象 * `startDate:date` 日期对象 返回:`number` 数值 返回两个日期相差多少分钟。 ### `DAYS` 用法:`DAYS(endDate, startDate)` * `endDate:date` 日期对象 * `startDate:date` 日期对象 返回:`number` 数值 返回两个日期相差多少天。 ### `HOURS` 用法:`HOURS(endDate, startDate)` * `endDate:date` 日期对象 * `startDate:date` 日期对象 返回:`number` 数值 返回两个日期相差多少小时。 ### `DATEMODIFY` 用法:`DATEMODIFY(date, 2, 'days')` * `date:date` 日期对象 * `num:number` 数值 * `unit:string` 单位:支持年、月、天等等 返回:`date` 日期对象 修改日期,对日期进行加减天、月份、年等操作。 示例: DATEMODIFY(A, -2, 'month'), 对日期 A 进行往前减2月的操作。 ### `STRTODATE` 用法:`STRTODATE(value[, format=""])` * `value:string` 日期字符 * `format:string` 日期格式 返回:`date` 日期对象 将字符日期转成日期对象,可以指定日期格式。 示例:STRTODATE('2021/12/6', 'YYYY/MM/DD') ### `ISBEFORE` 用法:`ISBEFORE(a, b)` * `a:date` 第一个日期 * `b:date` 第二个日期 * `unit:string` 单位,默认是 'day', 即之比较到天 返回:`boolean` 判断结果 判断两个日期,是否第一个日期在第二个日期的前面,是则返回 true,否则返回 false。 ### `ISAFTER` 用法:`ISAFTER(a, b)` * `a:date` 第一个日期 * `b:date` 第二个日期 * `unit:string` 单位,默认是 'day', 即之比较到天 返回:`boolean` 判断结果 判断两个日期,是否第一个日期在第二个日期的后面,是则返回 true,否则返回 false。 ### `BETWEENRANGE` 用法:`BETWEENRANGE(date, [start, end])` * `date:any` 第一个日期 * `daterange:Array<any>` 日期范围 * `unit:string` 单位,默认是 'day', 即之比较到天 * `inclusivity:string` 包容性规则,默认为'[]'。[ 表示包含、( 表示排除,如果使用包容性参数,则必须传入两个指示符,如'()'表示左右范围都排除 返回:`boolean` 判断结果 判断日期是否在指定范围内,是则返回 true,否则返回 false。 示例:BETWEENRANGE('2021/12/6', ['2021/12/5','2021/12/7'])。 ### `ISSAMEORBEFORE` 用法:`ISSAMEORBEFORE(a, b)` * `a:date` 第一个日期 * `b:date` 第二个日期 * `unit:string` 单位,默认是 'day', 即之比较到天 返回:`boolean` 判断结果 判断两个日期,是否第一个日期在第二个日期的前面或者相等,是则返回 true,否则返回 false。 ### `ISSAMEORAFTER` 用法:`ISSAMEORAFTER(a, b)` * `a:date` 第一个日期 * `b:date` 第二个日期 * `unit:string` 单位,默认是 'day', 即之比较到天 返回:`boolean` 判断结果 判断两个日期,是否第一个日期在第二个日期的后面或者相等,是则返回 true,否则返回 false。 ## 其他 ### `DATESTRISO` 用法:`` 返回日期参数(可能是日期/时间戳数字/字符串时间)的ISO形式的字符串 ### `GET` 用法:`GET(arr, 2)` * `obj:any` 对象或数组 * `path:string` 路径 * `defaultValue:any` 如果解析不到则返回该值 返回:`any` 结果 根据对象或者数组的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代。 示例: GET([0, 2, {name: 'amis', age: 18}], 1) 得到 2, GET([0, 2, {name: 'amis', age: 18}], '2.name') 得到 'amis', GET({arr: [{name: 'amis', age: 18}]}, 'arr[0].name') 得到 'amis', GET({arr: [{name: 'amis', age: 18}]}, 'arr.0.name') 得到 'amis', GET({arr: [{name: 'amis', age: 18}]}, 'arr.1.name', 'not-found') 得到 'not-found'。 ### `SET` 用法:`GET(arr, 2)` * `obj:undefined` 对象或数组 * `path:string` 路径 * `value:any` 如果解析不到则返回该值 返回:`any` 结果 根据对象或者数组的path路径设置值。 如果解析到的 value 是 undefined 不会进行任何操作. 示例: SET([0, 2, {name: 'amis', age: 18}], 1, 3) 得到 [0, 3, {name: 'amis', age: 18}], SET([0, 2, {name: 'amis', age: 18}], '2.name', 'jamis') 得到 [0, 2, {name: 'jamis', age: 18}], SET({arr: [{name: 'amis', age: 18}]}, 'arr[0].name', 'jamis') 得到 {arr: [0, 2, {name: 'amis', age: 18}]}, SET({arr: [{name: 'amis', age: 18}]}, 'arr.0.name', 'jamis') 得到 {arr: [0, 2, {name: 'amis', age: 18}]}, SET({arr: [{name: 'amis', age: 18}]}, 'arr.1.name', 'not-found') 得到 {arr: [{name: 'amis', age: 18}]}。 ### `ISTYPE` 用法:`isType([{a: '1'}, {b: '2'}, {a: '1'}], 'array')` * `判断对象:string` null 返回:`boolean` 结果 判断是否为类型支持:string, number, array, date, plain-object。 ## 数组 ### `COUNT` 用法:`COUNT(arr)` * `arr:Array<any>` 数组 返回:`boolean` 结果 返回数组的长度。 ### `ARRAYMAP` 用法:`arrayMap(arr, item => item)` * `arr:Array<any>` 数组 * `iterator:Array<any>` 箭头函数 返回:`boolean` 结果 数组做数据转换,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 ### `ARRAYFILTER` 用法:`` * `arr:Array<any>` 数组 * `iterator:Array<any>` 箭头函数, 支持3个参数, item: 当前的item, index: 当前的索引, arr: 当前遍历的数组 返回:`boolean` 结果 数据做数据过滤,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法, 可以在箭头函数里使用其他的公式函数, 访问当前的数据域 示例: ```js arrayFilter(arr, item => item) arrayFilter(arr, (item, index, arr) => item) arrayFilter($apps, app => !keywords || OR(CONTAINS(app.appId, keywords), CONTAINS(app.name, keywords))) ``` ### `ARRAYFINDINDEX` 用法:`` * `arr:Array<any>` 数组 * `iterator:Array<any>` 箭头函数 返回:`number` 结果 数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 找出第二个箭头函数返回为 true 的成员的索引。 示例: ```js arrayFindIndex([0, 2, false], item => item === 2) // return 1 ``` ### `ARRAYFIND` 用法:`arrayFind(arr, item => item === 2)` * `arr:Array<any>` 数组 * `iterator:Array<any>` 箭头函数 返回:`any` 结果 数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 找出第二个箭头函数返回为 true 的成员。 示例: arrayFind([0, 2, false], item => item === 2) 得到 2。 ### `ARRAYSOME` 用法:`arraySome(arr, item => item === 2)` * `arr:Array<any>` 数组 * `iterator:Array<any>` 箭头函数 返回:`boolean` 结果 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 判断第二个箭头函数是否存在返回为 true 的成员,是则返回 true,否则返回 false。 示例: arraySome([0, 2, false], item => item === 2) 得到 true。 ### `ARRAYEVERY` 用法:`arrayEvery(arr, item => item === 2)` * `arr:Array<any>` 数组 * `iterator:Array<any>` 箭头函数 返回:`boolean` 结果 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 判断第二个箭头函数返回是否都为 true,是则返回 true,否则返回 false。 示例: arrayEvery([0, 2, false], item => item === 2) 得到 false ### `ARRAYINCLUDES` 用法:`arrayIncludes(arr, 2)` * `arr:Array<any>` 数组 * `item:any` 元素 返回:`any` 结果 判断数据中是否存在指定元素。 示例: arrayIncludes([0, 2, false], 2) 得到 true。 ### `ARRAYTOOBJECT` 用法:`arrayToObject(arr, 'key', 'value')` * `arr:Array<>` 数组, 里面的项可以是一个对象或者数组 * `keyAttr:undefined` 作为新对象的key的属性名, 也可以是数组的索引值 * `valueAttr:undefined` 作为新对象的value的属性名或者数组的索引值, 可不传递, 不传时是将整个对象作为value 返回:`object` 结果 从对象数组中取一个属性(keyAttr)作为新对象的key, 另一个属性(valueAttr, 可不传, 不传时是整个对象)作为对象的value, 相当于 Object.fromEntries(arr.map(item => [item[key], item[value]])) 示例: arrayToObject([{key: 'key1', value: 2}, {key: 'key2', value: 3}], 'key', 'value') 得到 {key1: 2, key2: 3}。 ### `ARRAYSPLICE` 用法:`fnARRAYSPLICE(arr, start, deleteCount, ...itemsToAdd)` * `arr:Array<any>` 数组 * `start:number` 开始索引 * `deleteCount:number` 删除元素个数 * `itemsToAdd:...Array<any>` 要添加的元素 返回:`Array<any>` 新的数组, 而不是Array.prototype.splice函数返回的结果 从数组中删除或者插入n个元素 示例: ARRAYSPLICE(['a', 'b', 'c'], 0, 1, 'd') 得到 ['b', 'c', 'd']。 ### `ARRAYSLICE` 用法:`ARRAYSLICE([1, 2, 3, 4], 1, 3)` * `arr:Array<any>` null * `start:undefined` 起始索引 * `end:undefined` 截至索引 返回:`Array<any>` 新的数组 从数组中选择从start到end部分的子数组 示例: ARRAYSLICE([1, 2, 3, 4], 1, 3) 得到 [2, 3] ### `COMPACT` 用法:`COMPACT(arr)` * `arr:Array<any>` 数组 返回:`Array<any>` 结果 数组过滤掉 false、null、0 和 ""。 示例: COMPACT([0, 1, false, 2, '', 3]) 得到 [1, 2, 3]。 ### `JOIN` 用法:`JOIN(arr, string)` * `arr:Array<any>` 数组 * `separator:String` 分隔符 返回:`String` 结果 数组转成字符串。 示例: JOIN(['a', 'b', 'c'], '=') 得到 'a=b=c'。 ### `CONCAT` 用法:`CONCAT(['a', 'b', 'c'], ['1'], ['3'])` * `arr:Array<any>` 数组 返回:`Array<any>` 结果 数组合并。 示例: CONCAT(['a', 'b', 'c'], ['1'], ['3']) 得到 ['a', 'b', 'c', '1', '3']。 ### `UNIQ` 用法:`UNIQ([{a: '1'}, {b: '2'}, {a: '1'}], 'x')` * `arr:Array<any>` 数组 * `field:string` 字段 返回:`Array<any>` 结果 数组去重,第二个参数「field」,可指定根据该字段去重。 示例: UNIQ([{a: '1'}, {b: '2'}, {a: '1'}], 'id')。 ## 对象 ### `OBJECTKEYS` 用法:`OBJECTTOKEYS({name: 'foo', age: 18})` * `obj:object` 参数对象 返回:`Array<string>` 对象的属性名数组, 如果参数是非对象类型(包括数组)或者报错, 都会返回空数组 调用`Object.keys`方法来获取到对象的 keys 示例: objectKeys({name: 'foo', age: 18}) 得到 ['name', 'age'] ### `ENCODEJSON` 用法:`ENCODEJSON({name: 'amis'})` * `obj:object` JS对象 * `replacer:undefined` null * `space:undefined` null 返回:`string` 结果 将JS对象转换成JSON字符串。 ### `JSONSTRINGIFY` 用法:`jsonStringify({name: 'amis'})` * `obj:object` JS对象 * `replacer:undefined` null * `space:undefined` null 返回:`string` 结果 将JS对象转换成JSON字符串。 示例: jsonStringify({name: 'amis'}) 得到 '{"name":"amis"}'。 ### `DECODEJSON` 用法:`DECODEJSON('{\"name\": "amis"}')` * `str:string` 字符串 返回:`object` 结果 解析JSON编码数据,返回JS对象。 示例: DECODEJSON('{\"name\": "amis"}') 得到 {name: 'amis'}。 ### `JSONPARSE` 用法:`jsonParse('{\"name\": "amis"}')` * `str:string` 字符串 返回:`object` 结果 解析JSON编码数据,返回JS对象。 示例: jsonParse('{\"name\": "amis"}') 得到 {name: 'amis'}。 ### `HASOWNPROPERTY` 用法:`hasOwnProperty('hasChildren')` * `property:undefined` 属性或者属性数组 返回:`boolean` 结果 判断当前数据域的对象里是否本身就包含了属性, 而不是不存在或者链上包含.