Zone 底座:迭代函数
Methods
(static) itAmb(input, consumer) → {Object/Array}
「标准」Ux.itAmb
基本介绍
「Ambiguity」二义性函数,consumer 负责每一个元素的生成
- 如果输入是
Array
则返回Array
。 - 如果输入是
Object
则返回Object
。
该方法会遍历Object或Array针对每一个键值对和元素执行consumer
方法,并且返回执行结果,执行过程中会实现二义性双遍历,只是需要注意的点:
- consumer 函数是一个 object -> object 的函数,此处是 JavaScript 中的 Object 对象
- 此函数只针对
[{}]
类型的对象数组生效(数组每个元素都是对象),或直接作用于{}
- 一旦函数被封装就会导致此处出现双遍历,也是「二义性」的来源。
示例
// 此处 room 可能是Array也可能是Object
const calcRoomCheckIn = (reference, order = {}, room) => Ux.itAmb(room, (amb => {
const {schedules = []} = order;
const orders = [order];
let $room = Ux.clone(amb);
$room.leaving = true;
$room.arriving = true;
mountColor(reference, $room);
mountOrder(orders, schedules, $room);
mountOp(reference, $room);
return $room;
}))
Parameters:
Name | Type | Description |
---|---|---|
input |
Object/Array | 二义性专用方法 |
consumer |
function | 执行函数 |
Returns:
返回任意值
- Type
- Object/Array
(static) itElement(data, field, itemFun)
「标准」Ux.itElement
- 该函数会一直递归,直接执行一层 Array 中的遍历,并且递归替换处理结果。
- 命中字段中的元素会在处理过后执行原始替换。
const array = [
{ "name": "Lang", "email": "lang.yu@hpe.com" },
[
{ name: "Lang1" },
{ name: "Lang2" }
]
]
Ux.itElement(array, "name", (value, item) => {
// value:该字段的值
// item:被遍历的对象本身,它包含了 name 的值
return "Hi " + name;
});
最终生成的数据格式已经被改动过了,该函数是具有修改副作用的,最终格式中所有的name
字段中的数据都发生了改变:
{
{ "name" : "Hi Lang", "email": "lang.yu@hpe.com" },
[
{ "name": "Hi Lang1" },
{ "name": "Hi Lang2" }
]
}
参数函数 itemFun
参数名 | 类型 | 说明 |
---|---|---|
value | String | 被遍历的字段值 |
item | Object | 被遍历到的包含了该字段的对象 |
Parameters:
Name | Type | Description |
---|---|---|
data |
Array.<Object> | 被遍历的数组(一般是对象数组) |
field |
String | 需要提取的对象对应的字段信息 |
itemFun |
function | 每一个元素的遍历专用处理 |
Throws:
10071 异常(console.error)
(static) itFull(data, items, fieldFun)
「引擎」Ux.itFull
data
中的每一个元素和 items 中的 key = value
构成一个条目,每个条目包含了三元操作数:
( element, key, value ),执行前提是 key 和 value 都合法才执行。
排除的 key, value 值包括 undefined、null、0 等所有无法通过JS判断的内容
特定场景代码参考下边片段:
const predicate = Abs.isFunction(fnPredicate) ? fnPredicate : () => true;
Abs.itFull(array, object, (item = {}, key, value) => {
if (predicate(value)) {
fnExecute(item, key, value);
}
});
参数函数 fieldFun
参数名 | 类型 | 说明 |
---|---|---|
item | Object | 首参:数组中的元素内容 |
key | String | 第二参:传入对象 items 的键值对中的键 |
value | Unknown | 第二参:传入对象 items 的键值对中的值 |
Parameters:
Name | Type | Description |
---|---|---|
data |
Array | 输入的数组数据 |
items |
Object | 输入的需要验证的 items 数据 |
fieldFun |
function | 最终执行的特殊函数 |
(static) itMatrix(matrix, eachFun) → {Array.<T>}
「标准」Ux.itMatrix
遍历二维数组
- 如果元素是 Array,则 eachFun 作用于每一个 Object 类型的元素。
- 如果元素是 Object,则 eachFun 直接作用于这个 Object。
- 会一直递归调用到最下层。
const matrix = [
[
{ name: "name1", age: "age1" },
{ name: "name2", age: "age2" }
],
{ name: "name3", age: "age3" }
]
Ux.itMatrix(matrix, (item) => {
console.info(item.name);
});
// 上述代码会依次打印:name1, name2, name3
Parameters:
Name | Type | Description |
---|---|---|
matrix |
Array.<(Array.<T>|Object)> | 二维表矩阵数据 |
eachFun |
function | 作用于每一个元素的单子函数 |
Returns:
返回 matrix 本身
- Type
- Array.<T>
(static) itObject(data, executor, invalid)
「标准」Ux.itObject
对象遍历函数,直接遍历 Object 对象,生成 key = value
的执行函数专用。
const user = {
username: "Lang",
email: "lang.yu@hpe.com"
}
Ut.itObject(user, (key, value) => {
// 此处的 key, value 对应
// 1. username = Lang
// 2. email = lang.yu@hpe.com
});
Parameters:
Name | Type | Default | Description |
---|---|---|---|
data |
Object | 将会被遍历的 Object 对象 |
|
executor |
function | 作用于 |
|
invalid |
boolean |
false
|
|
(static) itRepeat(loop, consumer) → {Array}
「标准」Ux.itRepeat
重复执行多次的专用函数,第一参数为循环和迭代的次数。
Parameters:
Name | Type | Default | Description |
---|---|---|---|
loop |
Number |
0
|
循环的次数 |
consumer |
function | 每次循环执行的函数 |
Returns:
返回每一次的返回值
- Type
- Array
(static) itRow(row) → {Array}
「引擎」Ut.itRow
- 如果输入是 Array,则直接返回 Array。
- 如果输入的是 Object,则直接返回 object.items 数据,前提是 items 必须是 Array。
Parameters:
Name | Type | Description |
---|---|---|
row |
Array | Object | 被遍历的行 |
Returns:
规范化过后的行相关信息
- Type
- Array
(static) itTree(treeArray, executor)
「标准」Ut.itTree
遍历树形数组,数组中的每个元素可能包含 children
属性,传入数据属于已经构造好的 treeArray,该函数
会递归执行每一个元素,元素包含两种:
- 顶层 Array 中的每一个元素 element。
- 没个元素若包含了 Array 类型的
children
则表示它包含子节点,直接执行每一个子节点。 - executor 为每个元素的处理函数(副作用函数)。
框架内部在注入 _level
字段时候会使用该函数
Ux.itTree(treeData, (item) => {
if (item.hasOwnProperty("_level")) {
item.selectable = item._level <= selectable;
}
});
Parameters:
Name | Type | Description |
---|---|---|
treeArray |
Array | 传入的数组对象。 |
executor |
function | 执行每个元素的函数。 |
(static) itUi(ui, eachFun, itemFun) → {Array.<Array.<T>>}
「引擎」Ux.itUi
表单 form 中的配置 ui
的专用遍历函数,会生成带坐标的二维矩阵。
该函数主要用于表单解析中,解析 ui
的专用函数,这里不提供示例代码,主要解析结构,如配置项为:
{
"_form": {
"ui": [
[
"name,用户名"
],
[
"email,邮箱",
{
"field": "age",
"optionItem.label": "年龄"
}
]
]
}
}
解析过后的最终数据结构如:
name 字段,位于: ui[0][0]。
email 字段,位于: ui[1][0]。
age 字段,位于: ui[1][1]。
ui[rowIndex][columnIndex]
中的两个参数如下:
- row:行索引,从
0
开始。 - column:列索引,从
0
开始。
Parameters:
Name | Type | Description |
---|---|---|
ui |
Array.<(Array.<T>|String)> | 矩阵配置,Grid布局中的表单单元格。 |
eachFun |
function | 单个组件专用处理函数,处理
|
itemFun |
function | 单个组件中的 Item 处理函数,处理
|
Returns:
返回矩阵相关配置,ui[rowIndex][columnIndex]
格式
- Type
- Array.<Array.<T>>
(static) itValue(object, transformer, keyopt)
「标准」Ux.itValue
多迭代模式下的迭代专用操作
- 遍历 object 中的的每一个字段 field。
- 拿到 field 对应的值,判断该值 valueRef 是否是一个合法的 Object。
- 如果合法,则执行
transformer
函数(同步函数)得到对应的返回值 processed。 - 根据 key 进行分离合并操作
- 如果没有传入 key,则直接将转换过的数据合并到 valueRef 变量中。
- 如果传入了 key
- 如果 valueRef 中包含了 key 键的值,则直接合并
(valueRef[key], processed)
。 - 如果 valueRef 中不包含 key 键的值,则设置:
valueRef[key] = processed
。
- 如果 valueRef 中包含了 key 键的值,则直接合并
在框架内部使用该函数的代码如下:
const parsePlugin = (buttons = {}, options = {}) => {
Ux.itValue(buttons, (button = {}) => {
const {plugin = {}} = button;
const configuration = {};
if (plugin.tooltip) {
configuration.tooltip = true;
}
if (plugin.confirm) {
configuration.confirm = options[plugin.confirm];
}
if (plugin.prompt) {
configuration.prompt = options[plugin.prompt];
}
if (plugin.connect) {
configuration.connect = options[plugin.connect];
}
if (plugin.message) {
configuration.message = options[plugin.message];
}
return configuration;
}, 'plugin');
return buttons;
};
该函数一般在特殊场景中使用,不会用于单一的场景,特殊场景遍历复杂,会统一消费。
参数函数 transformer
参数名 | 类型 | 说明 |
---|---|---|
valueRef | Object | 遍历到的默认的 Object 对象 |
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
object |
Object | 被迭代的JS的Object对象 |
|
transformer |
function | 执行转换的函数 |
|
key |
String |
<optional> |
可选的传入键 |