Zone 底座:值处理函数
Methods
(static) valueAppend(item, field, value)
「标准」Ux.valueAppend
不重复追加值到item
对象中(包含则不设置)
框架内部的使用代码如:
const {$clear, form} = reference.props;
// 记录切换:从更新表单 -> 添加表单切换
if ($clear && $clear.is()) {
const keys = $clear.to();
keys.forEach(key => Value.valueAppend(data, key, undefined));
}
这里需要解释这个API和Ux.assign
(mode=2)的区别,在Ux.assign
中,追加模式是做合并,而且追加时支持嵌套追加,
除了顶层Object以外它的子对象也会实现合并追加流程,而Ux.valueAppend
是单纯的值追加过程,只在当前传入对象中追加
是否包含了field的情况。
示例:
const item = {
"name": "emma",
"phone": "13550878787"
}
Ux.valueAppend(item, "age", 18);
上述代码执行过后
item = {
"name": "emma",
"phone": "13550878787",
"age": 18
}
Parameters:
Name | Type | Description |
---|---|---|
item |
Object | 被追加字段的对象引用 |
field |
String | 将要追加的字段名 |
value |
any | 将要追加的字段值 |
(static) valueArray(input) → {Array}
「标准」Ux.valueArray
对数据进行规范化解析,确保转换过后的一定是 Array 。
- 如果 input = undefined,返回 []
- 如果 input = Array,直接返回
- 如果 input = Object,则检查 list 节点(必须是Array)
Parameters:
Name | Type | Description |
---|---|---|
input |
any | 输入的数据 |
Returns:
返回转换好的Array
- Type
- Array
(static) valueBoolean(literal) → {boolean}
「标准」Ux.valueBoolean
将输入的数据转换为 boolean 类型。
示例:
const value1 = "true";
const output1 = Ux.valueBoolean(value1);
const value2 = "123";
const output2 = Ux.valueBoolean(value2);
// 最终结果
// output1 的值为 true
// output2 的值为 false
Parameters:
Name | Type | Description |
---|---|---|
literal |
any | 待转换的输入数据 |
Returns:
转换后的 boolean 值
- Type
- boolean
(static) valueCopy(target, source, field) → {Object}
「标准」Ux.valueCopy
该函数负责将 field
字段中的信息从 source 拷贝到 target 中。
- field 为 String:拷贝单个字段数据
- field 为 Array:拷贝多个字段数据
- 如果读取的数据为 Object / Array 则采用深度拷贝
示例:
const params1 = {
"orderId": "239975a7-f164-43b3-a9d1-4516f98c1948",
"amount": 120,
"signMobile": "18604409876",
"indent": "NUM.PAYBILL",
"language": "cn",
"level": 2,
"name": "ox.rbac.role"
}
const params2 = {
"language": "en",
"level": 3,
"name": "ox.rbac.role"
}
const value = Ux.valueCopy(params1, [
"orderId",
"amount",
"signMobile",
"indent"
], params2);
执行上述代码之后的结果:
value = {
"orderId": "239975a7-f164-43b3-a9d1-4516f98c1948",
"amount": 120,
"signMobile": "18604409876",
"indent": "NUM.PAYBILL",
"language": "en",
"level": 3,
"name": "ox.rbac.role"
}
Parameters:
Name | Type | Description |
---|---|---|
target |
Object | 拷贝目标对象 |
source |
Object | 拷贝源对象 |
field |
String | Array | 需要拷贝的字段信息 |
Returns:
最终拷贝过后的对象
- Type
- Object
(static) valueDatetime(value, format) → {Dayjs}
「标准」Ux.valueDatetime
时间转换标准函数,将字符串格式的对象转换成合法 Dayjs 对象,返回失败则报错。
示例写法:
const now = Ux.valueDatetime(Ux.valueNow("HH:mm:ss"), "HH:mm:ss");
可支持的 format 格式信息详见 Ux.valueNow 。
Parameters:
Name | Type | Description |
---|---|---|
value |
String | 被转换的字符串。 |
format |
String | Dayjs可解析的格式信息,默认ISO。 |
Returns:
返回转换后的 Dayjs 对象。
- Type
- Dayjs
(static) valueDuration(from, to, mode) → {number}
「标准」Ux.valueDuration
根据from和to计算中间的duration差值。
支持8种计算模式,如下表所示:(各个传入的模式对大小写不敏感,支持缩写和复数。)
模式 | 缩写 | 复数 | 描述 |
---|---|---|---|
date | D | dates | 日期 |
day | d | days | 星期(星期日0,星期六6) |
month | M | months | 月份(0-11) |
year | y | years | 年 |
hour | h | hours | 小时 |
minute | m | minutes | 分钟 |
second | s | seconds | 秒 |
millisecond | ms | milliseconds | 毫秒 |
示例:
const startDate = "2022-06-05";
const mode = "month";
const endDate = "2023-01-25";
const duration = Ux.valueDuration(startDate, endDate, mode);
返回结果:
duration => 7
Parameters:
Name | Type | Default | Description |
---|---|---|---|
from |
String | Dayjs | 开始时间 |
|
to |
String | Dayjs | 结束时间 |
|
mode |
String |
day
|
计算模式 |
Returns:
返回最终的计算数值
- Type
- number
(static) valueEndTime(from, duration, mode) → {Dayjs}
「标准」Ux.valueEndTime
根据开始时间、间隔、模式计算结束时间
支持8种模式,如下表所示:(各个传入的模式对大小写不敏感,支持缩写和复数。)
模式 | 缩写 | 复数 | 描述 |
---|---|---|---|
date | D | dates | 日期 |
day | d | days | 星期(星期日0,星期六6) |
month | M | months | 月份(0-11) |
year | y | years | 年 |
hour | h | hours | 小时 |
minute | m | minutes | 分钟 |
second | s | seconds | 秒 |
millisecond | ms | milliseconds | 毫秒 |
示例:
const startDate = "2023-06-04 19:06:55";
const mode1 = "year";
const endDate1 = Ux.valueEndTime(startDate, 7, mode1);
const mode2 = "hour";
const endDate2 = Ux.valueEndTime(startDate, 7, mode2);
返回结果:
endDate1 => "2024-01-04 19:06:55"
endDate2 => "2023-06-05 02:06:55"
Parameters:
Name | Type | Default | Description |
---|---|---|---|
from |
String | Dayjs | 开始时间 |
|
duration |
Number | 间隔时间 |
|
mode |
String |
day
|
计算模式 |
Returns:
返回结束时间
- Type
- Dayjs
(static) valueExpr(expr, data, keep) → {string}
「引擎」Ux.valueExpr
(通常内部)解析表达式强化方法,主要用于解析Zero中带:
的自定义表达式相关信息。
const user = {
username: "Lang",
age: 12
};
const keepValue = Ux.valueExpr("你的名字:username", user, true);
// 输出:你的名字Lang。
// 执行后 user 的值为:{ username: "Lang", age: 12 };
const removeValue = Ux.valueExpr("你的名字:username", user);
// 输出:你的名字Lang。
// 之后后 user 的值:{ age:12 }; 原始的 username 已经从输入Object中移除。
注意第三参数,第三参数会对传入参数执行保留或不保留的两种方案,如果 keep = false(默认),那么在执行过后,原始入参中
被替换的参数属性会被移除掉,而 keep = true 时则不会移除,会保留其数据信息,并且注意该方法和Ux.formatExpr
的区别,
通常valueExpr
是直接使用,建议在内部调用,而formatExpr
会有更多操作,所以提供给用户调用。
Parameters:
Name | Type | Default | Description |
---|---|---|---|
expr |
String | 传入的表达式或字段名。 |
|
data |
Object | 记录信息。 |
|
keep |
boolean |
false
|
格式化过后是否保留原始的值。 |
Returns:
返回最终格式化后的数据。
- Type
- string
(static) valueFactor(literal) → {Number}
「标准」Ux.valueFactor
因子计算函数,将一个带 %
号的字符串转换成浮点数,转换不成功则返回 undefined 。
示例:
const item = "62.5%";
const value = Ux.valueFactor(item);
// value 的值为 0.625
Parameters:
Name | Type | Description |
---|---|---|
literal |
String | 将要被转换的字符串 |
Returns:
返回最终转换后的浮点数
- Type
- Number
(static) valueFind(target, attrPath) → {any|*}
「引擎」Ux.valueFind
配置解析统一调用函数(特殊应用)
- 如果 attrPath 长度为1,则直接提取 target 中的:
target[attrPath[0]]
。 - 如果长度大于2,则先提取
target[attrPath[0]]
,其次提取第二阶段名称,暂时只支持长度为2的模式。
内部执行函数代码示例。
PROP: (expression, {props}) => fnPredicate("PROP", expression, () => {
const path = expression.split('.'); // 路径解析
return T.valueFind(props, path);
}),
Parameters:
Name | Type | Description |
---|---|---|
target |
any | 被查找的引用信息。 |
attrPath |
Array | 属性路径信息。 |
Returns:
返回最终解析的属性值。
- Type
- any | *
(static) valueFloat(literal, dft, digest) → {Number}
「标准」Ux.valueFloat
将一个字符串转换成合法浮点数,保证转换成功,如果出现转换失败,取默认值。
示例:
const valid = "12.1";
const okValue = Ux.valueFloat(valid, 0.0, 1);
const invalid = null;
const koValue = Ux.valueFloat(invalid, 0.00);
// 最终结果
// okValue 的值为 12.1
// koValue 的值为 0.00
Parameters:
Name | Type | Default | Description |
---|---|---|---|
literal |
String | 被转换的字符串 |
|
dft |
Number |
0
|
转换失败的默认值 |
digest |
Number |
2
|
小数点之后的位数 |
Returns:
返回最终浮点数
- Type
- Number
(static) valueInt(literal, dft) → {Number}
「标准」Ux.valueInt
将一个字符串转换成整数,保证转换成功,如果出现转换失败,取默认值。
const valid = "1231";
const okValue = Ux.valueInt(valid, 12);
const invalid = null;
const koValue = Ux.valueInt(invalid, 12);
// 最终结果
// okValue 的值为 1231
// koValue 的值为 12
Parameters:
Name | Type | Default | Description |
---|---|---|---|
literal |
String | 被转换的字符串 |
|
dft |
Number |
0
|
转换失败的默认值 |
Returns:
返回转换后的数值
- Type
- Number
(static) valueJDatetime(data, …fields) → {Object}
「标准」Ux.valueJDatetime
时间转换专用函数,将对象中的 Object 中所有 fields
字段转换成时间格式。
这个函数只支持 ISO 格式,批量转换对象中的字段。
示例:
const value = {
cretedAt: "xxx",
updatedAt: "xxx"
}
// 下列代码会将 value 对象中的 cretedAt 和 updatedAt 字段信息均转换为 ISO 的时间格式。
const value2 = Ux.valueJDatetime(value, "cretedAt", "updatedAt");
// 等价于
const value2 = Ux.valueJDatetime(value, ["cretedAt", "updatedAt"]);
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
data |
Object | 被转换的对象数据。 |
|
fields |
Array.<String> |
<repeatable> |
被转换对象的字段数组信息。 |
Returns:
被转换后的对象数据
- Type
- Object
(static) valueLadder(item) → {Object}
「标准」Ux.valueLadder
梯度处理专用函数,函数执行流程
- 先全部拉平,生成带
.
属性的对象(一层结构)。 - 按照拉平的属性名进行排序(顺序处理)。
- 然后执行结构化,将所有的
.
操作符移除。
最终目的是生成Json
树。
const config = {
"optionJsx.item": 12,
"optionItem.label": "标签",
"field": "email",
"optionItem.style.color": "red",
"ajax.magic.params": {
"name": "Lang",
"age": 13
}
}
const values = Ux.valueLadder(config);
上述代码执行过后,会返回下边的结果:
{
"ajax":{
"magic":{
"params":{
"name": "Lang",
"age": 13
}
}
},
"field": "email",
"optionItem":{
"label": "标签",
"style": {
"color": "red"
}
},
"optionJsx":{
"item": 12
}
}
Parameters:
Name | Type | Description |
---|---|---|
item |
Object | 输入对象处理 |
Returns:
返回最终构造的对象信息
- Type
- Object
(static) valueLink(from, to, vConn) → {Object}
「标准」Ux.valueLink
vConn = true
M1 = {
"k1": "v1",
"k2": "v2"
},
M2 = {
"v1": "value1",
"v2": "value2"
}
R = {
"k1": "value1",
"k2": "value2"
}
vConn = false
M1 = {
"k1": "v1",
"k2": "v2"
},
M2 = {
"k1": "value1",
"k2": "value2"
}
R = {
"v1": "value1",
"v2": "value2"
}
Parameters:
Name | Type | Default | Description |
---|---|---|---|
from |
Object | 拷贝源对象 |
|
to |
Object | 拷贝目标对象 |
|
vConn |
Boolean |
false
|
选择操作模式 |
Returns:
最终拷贝过后的对象
- Type
- Object
(static) valueMap(target, source, config) → {Object}
「标准」Ux.valueMap
此函数与valueOk功能很像,为将 config 中的信息作为映射将 source 的信息拷贝到 target 。
示例:
const source = {
username: "emma"
}
const target = {
email: "1096721799@qq.com"
}
const config = {
username: "userfullname"
}
const value = Ux.valueMap(target, source, config);
执行上述代码之后的结果为:
value = {
userfullname: "emma",
email: "1096721799@qq.com"
}
Parameters:
Name | Type | Description |
---|---|---|
target |
Object | 拷贝目标对象 |
source |
Object | 拷贝源对象 |
config |
Object | 需要拷贝的字段映射信息 |
Returns:
最终拷贝过后的对象
- Type
- Object
(static) valueNow(pattern) → {Dayjs}
「标准」Ux.valueNow
返回当前时间,直接得到 Dayjs 对象。
如果没有传 pattern 参数,则默认返回 ISO 8601 字符串。
示例(假设当前时间为2019-01-25 00:00:00)
const dateNow = Ux.valueNow();
// 执行上述代码之后,dateNow = '2019-01-25T02:00:00.000Z'
可支持的格式化占位符列表如下:
标识 | 示例 | 描述 |
---|---|---|
YY | 18 | 年,两位数 |
YYYY | 2018 | 年,四位数 |
M | 1-12 | 月,从1开始 |
MM | 01-12 | 月,两位数 |
MMM | Jan-Dec | 月,英文缩写 |
MMMM | January-December | 月,英文全称 |
D | 1-31 | 日 |
DD | 01-31 | 日,两位数 |
d | 0-6 | 一周中的一天,星期天是0 |
dd | Su-Sa | 最简写的星期几 |
ddd | Sun-Sat | 简写的星期几 |
dddd | Sunday-Saturday | 星期几,英文全称 |
H | 0-23 | 小时 |
HH | 00-23 | 小时,两位数 |
h | 1-12 | 小时,12小时制 |
hh | 01-12 | 小时,12小时制,两位数 |
m | 0-59 | 分钟 |
mm | 00-59 | 分钟,两位数 |
s | 0-59 | 秒 |
ss | 00-59 | 秒,两位数 |
S | 0-9 | 毫秒(十),一位数 |
SS | 00-99 | 毫秒(百),两位数 |
SSS | 000-999 | 毫秒,三位数 |
Z | -05:00 | UTC的偏移量,±HH:mm |
ZZ | -0500 | UTC的偏移量,±HHmm |
A | AM/PM | 上/下午,大写 |
a | am/pm | 上/下午,小写 |
Do | 1st...31st | 月份的日期与序号 |
... | ... | 其他格式(依赖 AdvancedFormat 插件 ) |
Parameters:
Name | Type | Description |
---|---|---|
pattern |
String | 可支持的时间格式。 |
Returns:
返回合法的 Dayjs 对象。
- Type
- Dayjs
(static) valueOk(input, config, output) → {Object}
「引擎」Ux.valueOk
该函数负责将 field
字段中的信息从 source 拷贝到 target 中。
- field 为 String:拷贝单个字段数据
- field 为 Array:拷贝多个字段数据
- 如果读取的数据为 Array 则采用深度拷贝
示例:
const params1 = {
"orderId": "239975a7-f164-43b3-a9d1-4516f98c1948",
"amount": 120,
"signMobile": "18604409876",
"indent": "NUM.PAYBILL",
"language": "cn",
"level": 2,
"name": "ox.rbac.role"
}
const params2 = {
"language": "en",
"level": 3,
"name": "ox.rbac.role"
}
const value = Ux.valueOk(params1, [
"relatedId,orderId",
"amount",
"signMobile",
"indent=NUM.SETTLEMENT"
], params2);
执行上述代码之后的结果:
value = {
"relatedId": "239975a7-f164-43b3-a9d1-4516f98c1948",
"amount": 120,
"signMobile": "18604409876",
"indent": "NUM.SETTLEMENT",
"language": "en",
"level": 3,
"name": "ox.rbac.role"
}
Parameters:
Name | Type | Description |
---|---|---|
input |
Object | 拷贝源对象 |
config |
Array | String | 需要拷贝的字段信息 |
output |
Object | 拷贝目标对象(可选) |
Returns:
最终拷贝过后的对象
- Type
- Object
(static) valuePair(expr) → {Object}
「标准」Ux.valuePair
表达式解析成对象的专用函数
- 如果 expr 是 String 则执行解析。
- 如果 expr 是 Object类型,则直接返回 expr 这个对象。
注意:如果值里面本身包含了逗号,则需要用markdown专用的语法对逗号进行转换。
const user = "username=Lang,email=lang.yu@hpe.com";
const userObj = Ux.valuePair(user);
上述代码执行后生成格式如:
{
"username": "Lang",
"email": "lang.yu@hpe.com"
}
Parameters:
Name | Type | Description |
---|---|---|
expr |
String | 表达式信息,可能包含键值对: |
Returns:
返回转换好的对象
- Type
- Object
(static) valueParse(valueOrExpr) → {Object}
「标准」Ux.valueParse
将字符串解析成
{
"type": "解析类型",
"expression": "最终表达式"
}
示例:
const value = "PROP:app.mHotel.key";
const outValue = Ux.valueParse(value);
最终解析成:
{
"type": "PROP",
"expression": "app.mHotel.key"
}
Parameters:
Name | Type | Description |
---|---|---|
valueOrExpr |
String | 表达式信息 |
Returns:
计算表达式的解析结果。
- Type
- Object
(static) valuePath(data, path) → {null|any}
「标准」Ux.valuePath
对象树检索专用函数,可根据 path 检索对象树
示例:
const user = {
"teacher":{
"son":{
"username": "Lang"
}
}
}
const teacher = Ux.valuePath(user, "teacher");
const son = Ux.valuePath(user, "teacher.son");
const username = Ux.valuePath(user, "teacher.son.username");
返回结果:
teacher = { "son":{ "username": "Lang" } }
son = { "username": "Lang"}
username = "Lang"
Parameters:
Name | Type | Description |
---|---|---|
data |
Object | 将要搜索的对象。 |
path |
String | 路径必须是一个字符串,并且包含 |
Returns:
返回最终搜索到的值,否则为 null。
- Type
- null | any
(static) valuePinyin(input) → {String}
「标准」Ux.valuePinyin
将汉字转换成拼音,在某些场景中,中文字转换成拼音后可根据拼音的字典序进行排列,这是业务场景所必须的,这种转换
也是有必要的,而系统中主要使用了js-pinyin
模块实现直接转换,封装了第三方库。
示例:
const name = "虞浪";
const pinyin = Ux.valuePinyin(name);
返回结果:
pinyin => "yulang"
Parameters:
Name | Type | Description |
---|---|---|
input |
String | 输入的数据 |
Returns:
返回转换好的拼音信息
- Type
- String
(static) valueSTDN(value, server) → {Object}
「标准」Ux.valueSTDN
此API功能与 valueT 相似,均为类型保障,区别在于 valueT 是单值处理,而 valueSTDN 为全值处理。
类型支持的值如下:
BOOLEAN
: 布尔值INTEGER
:整数DECIMAL
:浮点数STRING
:字符串TIME
:时间DATETIME
:日期时间DATE
:日期
虽然目前服务端和客户端支持的类型一致,但有些细节有区别,比如客户端的时间是 HH:mm 格式,而服务端为 HH:mm:ss 格式。
简单示例如下:
const value = {
"active": "true",
"__metadata":{
"active": "BOOLEAN"
}
}
// 使用客户端解析模式,根据 __metadata 的设置,将 active 的值类型转换为 BOOLEAN。
const data1 = Ux.valueSTDN(value);
// 使用服务端解析模式,根据 __metadata 的设置,将 active 的值类型转换为 BOOLEAN。
const data2 = Ux.valueSTDN(value, true);
Parameters:
Name | Type | Default | Description |
---|---|---|---|
value |
Object | 传入的值 |
|
server |
Boolean |
false
|
是否使用服务端解析模式 |
Returns:
最终类型化后的值
- Type
- Object
(static) valueStartTime(to, duration, mode) → {Dayjs}
「标准」Ux.valueStartTime
根据结束时间、间隔、模式计算开始时间
支持8种模式,如下表所示:(各个传入的模式对大小写不敏感,支持缩写和复数。)
模式 | 缩写 | 复数 | 描述 |
---|---|---|---|
date | D | dates | 日期 |
day | d | days | 星期(星期日0,星期六6) |
month | M | months | 月份(0-11) |
year | y | years | 年 |
hour | h | hours | 小时 |
minute | m | minutes | 分钟 |
second | s | seconds | 秒 |
millisecond | ms | milliseconds | 毫秒 |
示例:
const endDate = "2023-06-04 19:06:55";
const mode1 = "year";
const startDate1 = Ux.valueStartTime(endDate, 7, mode1);
const mode2 = "hour";
const startDate2 = Ux.valueStartTime(endDate, 7, mode2);
返回结果:
startDate1 => "2022-11-04 19:06:55"
startDate2 => "2023-06-04 12:06:55"
Parameters:
Name | Type | Default | Description |
---|---|---|---|
to |
String | Dayjs | 结束时间 |
|
duration |
Number | 间隔时间 |
|
mode |
String |
day
|
计算模式 |
Returns:
返回开始时间
- Type
- Dayjs
(static) valueSubset(input, fields) → {Object|Array}
「标准」Ux.valueSubset
将传入的 input 数据根据 fields 取子集。
示例如下:
const input = {
"name": "lang",
"age": 18,
"email": "email@xx.com",
"active": undefined
}
// 对 input 取子集,只取字段 "name","age","active",生成新的子集并返回。
const value = Ux.valueSubset(input, ["name","age","active"]);
// 等价于
const value = Ux.valueSubset(input, "name", "age", "active");
最终执行过后,返回的value值为:
{
"name": "lang",
"age": 18
}
注意:如果值为 undefined ,则不会被取出,示例中字段 active 就没有被取出。
Parameters:
Name | Type | Description |
---|---|---|
input |
Object | Array | 传入的值 |
fields |
Array.<String> | 取子集的字段数组信息 |
Returns:
最终取的子集
- Type
- Object | Array
(static) valueT(value, type) → {Boolean|integer|Float|String}
「标准」Ux.valueT
将传入的数据转换为指定的类型(类型保障),类型支持的值如下:
BOOLEAN, B
: 布尔值INTEGER, I
:整数DECIMAL, D
:浮点数
注意:
1、在执行转换之前,会进行判断,当传入的值为 undefined 时,不进行转换。 2、当传入的类型不为上述类型,则默认转换为 String。 3、类型转换的解析模式为 客户端 模式,即用 JavaScript 的方式。
传入的类型可以为简写值,示例如下:
const value = "true";
const data = Ux.valueT(value, "BOOLEAN");
// 等价于
const data = Ux.valueT(value, "B");
Parameters:
Name | Type | Default | Description |
---|---|---|---|
value |
any | 传入的值 |
|
type |
String |
STRING
|
传入的类型 |
Returns:
最终类型化后的值
- Type
- Boolean | integer | Float | String
(static) valueValid(data, wild) → {Object}
「标准」Ux.valueValid
将输入数据处理成合法对象,两种模式处理对象Object,由于后端无法识别某些值,所以执行下边处理
- 宽模式,0, null, undefined,false 都会被移除,包括 ""。
- 严格模式,仅移除 undefined,其他的保留。
const data = {
"username": "Lang",
"email": null,
"age": 0,
"active": false,
"address": undefined
}
// 宽模式
const data1 = Ux.valueValid(data, true);
// 严模式
const data2 = Ux.valueValid(data);
最终结果
data1 = {
"username": "Lang"
}
data2 = {
"username": "Lang",
"email": null,
"age": 0,
"active": false
}
Parameters:
Name | Type | Description |
---|---|---|
data |
Object | 输入的Object对象。 |
wild |
boolean | 是否使用宽模式。 |
Returns:
返回处理好的数据。
- Type
- Object