packages/amis-formula/src/doc.md
用法:IF(condition, consequent, alternate)
condition:expression 条件表达式。例如:语文成绩>80consequent:any 条件判断通过的返回结果alternate:any 条件判断不通过的返回结果返回:any 根据条件返回不同的结果
如果满足条件condition,则返回consequent,否则返回alternate,支持多层嵌套IF函数。
等价于直接用JS表达式如:condition ? consequent : alternate。
用法:AND(expression1, expression2, ...expressionN)
conditions:...expression 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80返回:boolean
条件全部符合,返回 true,否则返回 false。
示例:AND(语文成绩>80, 数学成绩>80),
语文成绩和数学成绩都大于 80,则返回 true,否则返回 false,
等价于直接用JS表达式如:语文成绩>80 && 数学成绩>80。
用法:OR(expression1, expression2, ...expressionN)
conditions:...expression 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80返回:boolean
条件任意一个满足条件,返回 true,否则返回 false。
示例:OR(语文成绩>80, 数学成绩>80),
语文成绩和数学成绩任意一个大于 80,则返回 true,否则返回 false,
等价于直接用JS表达式如:语文成绩>80 || 数学成绩>80。
用法:XOR(condition1, condition2, ...expressionN)
condition:...expression 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80返回:boolean
异或处理,多个表达式组中存在奇数个真时认为真。
示例:XOR(语文成绩 > 80, 数学成绩 > 80, 英语成绩 > 80)
三门成绩中有一门或者三门大于 80,则返回 true,否则返回 false。
用法:IFS(condition1, result1, condition2, result2,...conditionN, resultN)
condition:...expression 条件表达式result:...any 返回值返回:any 第一个满足条件的结果,没有命中的返回 false。
判断函数集合,相当于多个 else if 合并成一个。
示例:IFS(语文成绩 > 80, "优秀", 语文成绩 > 60, "良", "继续努力"),
如果语文成绩大于 80,则返回优秀,否则判断大于 60 分,则返回良,否则返回继续努力。
用法:ABS(num)
num:number 数值返回:number 传入数值的绝对值
返回传入数字的绝对值。
用法:MAX(num1, num2, ...numN) or MAX([num1, num2, ...numN])
num:...number 数值返回:number 所有传入值中最大的那个
获取最大值,如果只有一个参数且是数组,则计算这个数组内的值。
用法:MIN(num1, num2, ...numN) or MIN([num1, num2, ...numN])
num:...number 数值返回:number 所有传入值中最小的那个
获取最小值,如果只有一个参数且是数组,则计算这个数组内的值。
用法:SUM(num1, num2, ...numN) or SUM([num1, num2, ...numN])
num:...number 数值返回:number 所有传入数值的总和
求和,如果只有一个参数且是数组,则计算这个数组内的值。
用法:INT(num)
num:number 数值返回:number 数值对应的整形
将数值向下取整为最接近的整数。
用法:MOD(num, divisor)
num:number 被除数divisor:number 除数返回:number 两数相除的余数
返回两数相除的余数,参数 number 是被除数,divisor 是除数。
用法:PI()
圆周率 3.1415...。
用法:ROUND(num[, numDigits = 2])
num:number 要处理的数字numDigits:number 小数位数,默认为2返回:number 传入数值四舍五入后的结果
将数字四舍五入到指定的位数,可以设置小数位。
用法:FLOOR(num[, numDigits=2])
num:number 要处理的数字numDigits:number 小数位数,默认为2返回:number 传入数值向下取整后的结果
将数字向下取整到指定的位数,可以设置小数位。
用法:CEIL(num[, numDigits=2])
num:number 要处理的数字numDigits:number 小数位数,默认为2返回:number 传入数值向上取整后的结果
将数字向上取整到指定的位数,可以设置小数位。
用法:SQRT(num)
num:number 要处理的数字返回:number 开平方的结果
开平方,参数 number 为非负数
用法:AVG(num1, num2, ...numN) or AVG([num1, num2, ...numN])
num:...number 要处理的数字返回:number 所有数值的平均值
返回所有参数的平均值,如果只有一个参数且是数组,则计算这个数组内的值。
用法:DEVSQ(num1, num2, ...numN)
num:...number 要处理的数字返回:number 所有数值的平均值
返回数据点与数据均值点之差(数据偏差)的平方和,如果只有一个参数且是数组,则计算这个数组内的值。
用法:AVEDEV(num1, num2, ...numN)
num:...number 要处理的数字返回:number 所有数值的平均值
数据点到其算术平均值的绝对偏差的平均值。
用法:HARMEAN(num1, num2, ...numN)
num:...number 要处理的数字返回:number 所有数值的平均值
数据点的调和平均值,如果只有一个参数且是数组,则计算这个数组内的值。
用法:LARGE(array, k)
nums:array 要处理的数字k:number 第几大返回:number 所有数值的平均值
数据集中第 k 个最大值。
用法:UPPERMONEY(num)
num:number 要处理的数字返回:string 数值中文大写字符
将数值转为中文大写金额。
用法:RAND()
返回大于等于 0 且小于 1 的均匀分布随机实数。每一次触发计算都会变化。
示例:RAND()*100,
返回 0-100 之间的随机数。
用法:LAST(array)
arr:...number 要处理的数组返回:any 最后一个值
取数据最后一个。
用法:POW(base, exponent)
base:number 基数exponent:number 指数返回:number 基数的指数次幂
返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。
用法:LEFT(text, len)
text:string 要处理的文本len:number 要处理的长度返回:string 对应字符串
返回传入文本左侧的指定长度字符串。
用法:RIGHT(text, len)
text:string 要处理的文本len:number 要处理的长度返回:string 对应字符串
返回传入文本右侧的指定长度字符串。
用法:LEN(text)
text:string 要处理的文本返回:number 长度
计算文本的长度。
用法:LENGTH(textArr)
textArr:Array<string> 要处理的文本集合返回:Array<number> 长度集合
计算文本集合中所有文本的长度。
用法:ISEMPTY(text)
text:string 要处理的文本返回:boolean 判断结果
判断文本是否为空。
用法:CONCATENATE(text1, text2, ...textN)
text:...string 文本集合返回:string 连接后的文本
将多个传入值连接成文本。
用法:CHAR(code)
code:number 编码值返回:string 指定位置的字符
返回计算机字符集的数字代码所对应的字符。
示例:CHAR(97) 等价于 "a"。
用法:LOWER(text)
text:string 文本返回:string 结果文本
将传入文本转成小写。
用法:UPPER(text)
text:string 文本返回:string 结果文本
将传入文本转成大写。
用法:UPPERFIRST(text)
text:string 文本返回:string 结果文本
将传入文本首字母转成大写。
用法:PADSTART(text)
text:string 文本num:number 目标长度pad:string 用于补齐的文本返回:string 结果文本
向前补齐文本长度。
示例 PADSTART("6", 2, "0"),
返回 06。
用法:CAPITALIZE(text)
text:string 文本返回:string 结果文本
将文本转成标题。
示例 CAPITALIZE("star"),
返回 Star。
用法:ESCAPE(text)
text:string 文本返回:string 结果文本
对文本进行 HTML 转义。
示例 ESCAPE("<star>&"),
返回 <start>&。
用法:TRUNCATE(text, 6)
text:string 文本text:number 最长长度返回:string 结果文本
对文本长度进行截断。
示例 TRUNCATE("amis.baidu.com", 6),
返回 amis...。
用法:BEFORELAST(text, '.')
text:string 文本delimiter:string 结束文本返回:string 判断结果
取在某个分隔符之前的所有字符串。
用法:SPLIT(text, ',')
text:string 文本delimiter:string 文本片段返回:Array<string> 文本集
将文本根据指定片段分割成数组。
示例:SPLIT("a,b,c", ","),
返回 ["a", "b", "c"]。
用法:TRIM(text)
text:string 文本返回:string 处理后的文本
将文本去除前后空格。
用法:STRIPTAG(text)
text:string 文本返回:string 处理后的文本
去除文本中的 HTML 标签。
示例:STRIPTAG("<b>amis</b>"),
返回:amis。
用法:LINEBREAK(text)
text:string 文本返回:string 处理后的文本
将字符串中的换行转成 HTML ,用于简单换行的场景。
示例:LINEBREAK("\n"),
返回: 。
用法:STARTSWITH(text, '片段')
text:string 文本startString:string 起始文本返回:boolean 判断结果
判断字符串(text)是否以特定字符串(startString)开始,是则返回 true,否则返回 false。
用法:ENDSWITH(text, '片段')
text:string 文本endString:string 结束文本返回:boolean 判断结果
判断字符串(text)是否以特定字符串(endString)结束,是则返回 true,否则返回 false。
用法:CONTAINS(text, searchText)
text:string 文本searchText:string 搜索文本返回:boolean 判断结果
判断参数 1 中的文本是否包含参数 2 中的文本,是则返回 true,否则返回 false。
用法:REPLACE(text, search, replace)
text:string 要处理的文本search:string 要被替换的文本replace:string 要替换的文本返回:string 处理结果
对文本进行全量替换。
用法:SEARCH(text, search, 0)
text:string 要处理的文本search:string 用来搜索的文本start:number 起始位置返回:number 命中的位置
对文本进行搜索,返回命中的位置。
用法:MID(text, from, len)
text:string 要处理的文本from:number 起始位置len:number 处理长度返回:string 命中的位置
返回文本字符串中从指定位置开始的特定数目的字符。
示例:MID("amis.baidu.com", 6, 3),
返回 aid。
用法:BASENAME(text)
text:string 要处理的文本返回:string 文件名
返回路径中的文件名。
示例:/home/amis/a.json,
返回:a.json。
用法:UUID(8)
length:number 生成的UUID字符串长度,默认为32位返回:string 生成的UUID字符串
生成UUID字符串
用法:DATE('2021-12-06 08:20:00')
创建日期对象,可以通过特定格式的字符串,或者数值。
需要注意的是,其中月份的数值是从0开始的, 即如果是12月份,你应该传入数值11。
用法:TIMESTAMP(date[, format = "X"])
date:date 日期对象format:string 时间戳格式,带毫秒传入 'x'。默认为 'X' 不带毫秒的。返回:number 时间戳
返回时间的时间戳。
用法:TODAY()
返回今天的日期。
用法:NOW()
返回现在的日期
用法: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(date)
date:any 日期isISO:boolean 是否ISO星期返回:number 星期几的数字标识
获取年份的星期,即第几周。
示例
WEEK('2023-03-05') 得到 9。
用法: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(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(date[unit = "day"])
date:date 日期对象unit:string 比如可以传入 'day'、'month'、'year' 或者 week 等等format:string 日期格式,可选返回:any 新的日期对象, 如果传入 format 则返回格式化后的日期字符串
返回日期的指定范围的开端。
用法:ENDOF(date[unit = "day"])
date:date 日期对象unit:string 比如可以传入 'day'、'month'、'year' 或者 week 等等format:string 日期格式,可选返回:any 新的日期对象, 如果传入 format 则返回格式化后的日期字符串
返回日期的指定范围的末尾。
用法:YEAR(date)
date:date 日期对象返回:number 数值
返回日期的年份。
用法:MONTH(date)
date:date 日期对象返回:number 数值
返回日期的月份,这里就是自然月份。
用法:DAY(date)
date:date 日期对象返回:number 数值
返回日期的天。
用法:HOUR(date)
date:date 日期对象返回:number 数值
返回日期的小时。
用法:MINUTE(date)
date:date 日期对象返回:number 数值
返回日期的分。
用法:SECOND(date)
date:date 日期对象返回:number 数值
返回日期的秒。
用法:YEARS(endDate, startDate)
endDate:date 日期对象startDate:date 日期对象返回:number 数值
返回两个日期相差多少年。
用法:MINUTES(endDate, startDate)
endDate:date 日期对象startDate:date 日期对象返回:number 数值
返回两个日期相差多少分钟。
用法:DAYS(endDate, startDate)
endDate:date 日期对象startDate:date 日期对象返回:number 数值
返回两个日期相差多少天。
用法:HOURS(endDate, startDate)
endDate:date 日期对象startDate:date 日期对象返回:number 数值
返回两个日期相差多少小时。
用法:DATEMODIFY(date, 2, 'days')
date:date 日期对象num:number 数值unit:string 单位:支持年、月、天等等返回:date 日期对象
修改日期,对日期进行加减天、月份、年等操作。
示例:
DATEMODIFY(A, -2, 'month'),
对日期 A 进行往前减2月的操作。
用法:STRTODATE(value[, format=""])
value:string 日期字符format:string 日期格式返回:date 日期对象
将字符日期转成日期对象,可以指定日期格式。
示例:STRTODATE('2021/12/6', 'YYYY/MM/DD')
用法:ISBEFORE(a, b)
a:date 第一个日期b:date 第二个日期unit:string 单位,默认是 'day', 即之比较到天返回:boolean 判断结果
判断两个日期,是否第一个日期在第二个日期的前面,是则返回 true,否则返回 false。
用法:ISAFTER(a, b)
a:date 第一个日期b:date 第二个日期unit:string 单位,默认是 'day', 即之比较到天返回:boolean 判断结果
判断两个日期,是否第一个日期在第二个日期的后面,是则返回 true,否则返回 false。
用法: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(a, b)
a:date 第一个日期b:date 第二个日期unit:string 单位,默认是 'day', 即之比较到天返回:boolean 判断结果
判断两个日期,是否第一个日期在第二个日期的前面或者相等,是则返回 true,否则返回 false。
用法:ISSAMEORAFTER(a, b)
a:date 第一个日期b:date 第二个日期unit:string 单位,默认是 'day', 即之比较到天返回:boolean 判断结果
判断两个日期,是否第一个日期在第二个日期的后面或者相等,是则返回 true,否则返回 false。
用法:COUNT(arr)
arr:Array<any> 数组返回:number 结果
返回数组的长度。
用法:ARRAYMAP(arr, item => item)
arr:Array<any> 数组iterator:Array<any> 箭头函数返回:Array<any> 返回转换后的数组
数组做数据转换,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
将数组中的每个元素转换成箭头函数返回的值。
示例:
ARRAYMAP([1, 2, 3], item => item + 1) 得到 [2, 3, 4]。
用法:ARRAYFILTER(arr, item => item)
arr:Array<any> 数组iterator:Array<any> 箭头函数返回:Array<any> 返回过滤后的数组
数据做数据过滤,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 将第二个箭头函数返回为 false 的成员过滤掉。
示例:
ARRAYFILTER([1, 2, 3], item => item > 1) 得到 [2, 3]。
用法:ARRAYFINDINDEX(arr, item => item === 2)
arr:Array<any> 数组iterator:Array<any> 箭头函数返回:number 结果
数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 找出第二个箭头函数返回为 true 的成员的索引。
示例:
ARRAYFINDINDEX([0, 2, false], item => item === 2) 得到 1。
用法:ARRAYFIND(arr, item => item === 2)
arr:Array<any> 数组iterator:Array<any> 箭头函数返回:any 结果
数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 找出第二个箭头函数返回为 true 的成员。
示例:
ARRAYFIND([0, 2, false], item => item === 2) 得到 2。
用法:ARRAYSOME(arr, item => item === 2)
arr:Array<any> 数组iterator:Array<any> 箭头函数返回:boolean 结果
数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 判断第二个箭头函数是否存在返回为 true 的成员,是则返回 true,否则返回 false。
示例:
ARRAYSOME([0, 2, false], item => item === 2) 得到 true。
用法:ARRAYEVERY(arr, item => item === 2)
arr:Array<any> 数组iterator:Array<any> 箭头函数返回:boolean 结果
数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。 判断第二个箭头函数返回是否都为 true,是则返回 true,否则返回 false。
示例:
ARRAYEVERY([0, 2, false], item => item === 2) 得到 false
用法:ARRAYINCLUDES(arr, 2)
arr:Array<any> 数组item:any 元素返回:any 结果
判断数据中是否存在指定元素。
示例:
ARRAYINCLUDES([0, 2, false], 2) 得到 true。
用法:COMPACT(arr)
arr:Array<any> 数组返回:Array<any> 结果
数组过滤掉 false、null、0 和 ""。
示例:
COMPACT([0, 1, false, 2, '', 3]) 得到 [1, 2, 3]。
用法:JOIN(arr, string)
arr:Array<any> 数组separator:String 分隔符返回:string 结果
数组转成字符串。
示例:
JOIN(['a', 'b', 'c'], '=') 得到 'a=b=c'。
用法:CONCAT(['a', 'b', 'c'], ['1'], ['3'])
arr:Array<any> 数组返回:Array<any> 结果
数组合并。
示例:
CONCAT(['a', 'b', 'c'], ['1'], ['3']) 得到 ['a', 'b', 'c', '1', '3']。
用法:UNIQ([{a: '1'}, {b: '2'}, {a: '1'}], 'x')
arr:Array<any> 数组field:string 字段返回:Array<any> 结果
数组去重,第二个参数「field」,可指定根据该字段去重。
示例:
UNIQ([{a: '1'}, {b: '2'}, {a: '1'}]) 得到 [{a: '1'}, {b: '2'}]。
用法:ARRAYUPDATE(array, 0, {name: 'new'})
arr:array 数组index:number 要更新的索引updates:object 更新的对象,浅合并返回:array 更新后的新数组
更新数组指定索引的元素,与更新对象进行浅合并。
示例:
ARRAYUPDATE([{id: 1, name: 'alice'}, {id: 2, name: 'bob'}], 0, {name: 'alice2'}) 得到 [{id: 1, name: 'alice2'}, {id: 2, name: 'bob'}]。
用法:ARRAYUPDATEBY(array, item => item.id === 1, {status: 'done'})
arr:array 数组predicate:Function 条件函数,返回 true 的元素会被更新updates:object 更新的对象,浅合并返回:array 更新后的新数组
根据条件更新数组元素,匹配条件的元素与更新对象进行浅合并。
示例:
ARRAYUPDATEBY([{id: 1, status: 'pending'}, {id: 2, status: 'active'}], item => item.id === 1, {status: 'done'}) 得到 [{id: 1, status: 'done'}, {id: 2, status: 'active'}]。
用法:ENCODEJSON({name: 'amis'})
obj:object JS对象返回:string 结果
将JS对象转换成JSON字符串。
示例:
ENCODEJSON({name: 'amis'}) 得到 '{"name":"amis"}'。
用法:DECODEJSON('{\"name\": "amis"}')
str:string 字符串返回:object 结果
解析JSON编码数据,返回JS对象。
示例:
DECODEJSON('{"name": "amis"}') 得到 {name: 'amis'}。
用法: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'。
用法:ISTYPE([{a: '1'}, {b: '2'}, {a: '1'}], 'array')
判断对象:string null返回:boolean 结果
判断是否为类型支持:string, number, array, date, plain-object。
用法:KEYS({name: 'alice', age: 18})
obj:object 要处理的对象返回:array 属性名数组
获取对象的所有属性名。
示例:
KEYS({name: 'alice', age: 18}) 得到 ['name', 'age']。
用法:VALUES({name: 'alice', age: 18})
obj:object 要处理的对象返回:array 属性值数组
获取对象的所有属性值。
示例:
VALUES({name: 'alice', age: 18}) 得到 ['alice', 18]。
用法:ENTRIES({name: 'alice', age: 18})
obj:object 要处理的对象返回:array 键值对数组
获取对象的键值对数组,每个元素为 [key, value] 的形式。
示例:
ENTRIES({name: 'alice', age: 18}) 得到 [['name', 'alice'], ['age', 18]]。
用法:PICK({name: 'alice', age: 18, email: '[email protected]'}, 'name', 'age')
obj:object 要处理的对象keys:...string 要选择的属性名,可以是多个参数返回:object 新对象,只包含指定的属性
从对象中选择指定的属性,返回新对象。
示例:
PICK({name: 'alice', age: 18, email: '[email protected]'}, 'name', 'age') 得到 {name: 'alice', age: 18}。
用法:OMIT({name: 'alice', age: 18, email: '[email protected]'}, 'email')
obj:object 要处理的对象keys:...string 要排除的属性名,可以是多个参数返回:object 新对象,排除了指定的属性
从对象中排除指定的属性,返回新对象。
示例:
OMIT({name: 'alice', age: 18, email: '[email protected]'}, 'email') 得到 {name: 'alice', age: 18}。
用法:MERGE({a: 1}, {b: 2}, {a: 3})
objects:...object 要合并的多个对象返回:object 合并后的新对象
合并多个对象,后者的属性覆盖前者(浅合并)。
示例:
MERGE({a: 1}, {b: 2}, {a: 3}) 得到 {a: 3, b: 2}。
用法:MAPVALUES({a: 1, b: 2}, item => item * 2)
obj:object 要处理的对象transformer:Function 转换函数,接收 (value, key, obj) 参数返回:object 新对象,包含转换后的值
使用箭头函数转换对象的所有属性值,需要搭配箭头函数一起使用。
示例:
MAPVALUES({a: 1, b: 2, c: 3}, item => item * 2) 得到 {a: 2, b: 4, c: 6}。
用法:HASKEY({name: 'alice'}, 'name')
obj:object 要检查的对象key:string 属性名返回:boolean 如果对象包含该属性返回 true,否则返回 false
检查对象是否包含指定的属性。
示例:
HASKEY({name: 'alice'}, 'name') 得到 true,HASKEY({name: 'alice'}, 'age') 得到 false。
用法:GROUPBY([{type: 'a', val: 1}, {type: 'a', val: 2}, {type: 'b', val: 3}], 'type')
items:array 要分组的数组iteratee:string|Function 分组键属性名或箭头函数返回:object 分组后的对象,键为分组值,值为该分组的数组
根据指定属性或函数将数组元素分组成对象,相同分组键的元素放在同一个数组中。
示例:
GROUPBY([{type: 'a', val: 1}, {type: 'a', val: 2}, {type: 'b', val: 3}], 'type') 得到 {a: [{type: 'a', val: 1}, {type: 'a', val: 2}], b: [{type: 'b', val: 3}]}。
用法:INDEXBY([{id: 1, name: 'alice'}, {id: 2, name: 'bob'}], 'id')
items:array 要转换的数组iteratee:string|Function 索引键属性名或箭头函数返回:object 转换后的索引对象,键为指定属性值,值为对应的数组元素
将数组转换为对象索引,使用指定属性或函数的返回值作为键,每个键对应一个元素。 如果有重复的键,后者会覆盖前者。
示例:
INDEXBY([{id: 1, name: 'alice'}, {id: 2, name: 'bob'}], 'id') 得到 {1: {id: 1, name: 'alice'}, 2: {id: 2, name: 'bob'}}。
用法:DEFAULTS({a: 1}, {b: 2, a: 3})
obj:object 要设置默认值的对象defaults:...object 包含默认值的对象,可以是多个参数返回:object 新对象,使用了默认值
为对象设置默认值,仅当属性不存在或为 undefined 时才使用默认值。 null 值和其他假值会被保留。
示例:
DEFAULTS({a: 1}, {b: 2, a: 3}) 得到 {a: 1, b: 2}, DEFAULTS({}, {status: 'pending', priority: 'normal'}) 得到 {status: 'pending', priority: 'normal'}。
用法:INVERT({name: 'alice', age: 'eighteen'})
obj:object 要反转的对象返回:object 新对象,键值互换
交换对象的键和值。适用于需要反向查询的映射关系。
示例:
INVERT({name: 'alice', age: 'eighteen'}) 得到 {alice: 'name', eighteen: 'age'}。
用法:FROMTUPLE([['a', 1], ['b', 2]])
entries:array 键值对数组,每个元素应为 [key, value] 的形式返回:object 新对象,由键值对数组构成
从键值对数组创建对象,将二维数组转换为对象形式。
示例:
FROMTUPLE([['a', 1], ['b', 2]]) 得到 {a: 1, b: 2}。