jamis-formula
Version:
负责 amis 里面的表达式实现,内置公式,编辑器等
1,320 lines (717 loc) • 28.8 kB
Markdown
## 逻辑函数
### `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>&")`,
返回 `<start>&`。
### `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` 结果
判断当前数据域的对象里是否本身就包含了属性, 而不是不存在或者链上包含.