列表函数 list-functions
列表函数允许您处理和处理历程表达式中的值集合。 这些功能对于过滤、排序、转换和分析客户历程中的阵列和列表至关重要。
当您需要执行以下操作时,请使用列表函数:
- 根据条件(筛选器,getListItem)从收藏集中筛选和提取特定项
- 按升序或降序对列表元素进行排序和组织(排序)
- 删除重复项,并从列表(distinct, distinctWithNull)中获取唯一值
- 检查集合(in)中是否存在值
- 限制从列表返回的项目数(limit)
- 获取列表的大小(listSize)或将列表转换为不同的格式(serializeList)
- 执行集合操作,如查找列表之间的公共元素(相交)
列表函数提供了用于处理复杂数据结构的强大工具,支持基于收集内容的复杂数据操作和条件逻辑。
distinct distinct
返回给定列表的不同值或对象。 Null条目将被忽略。
distinct(<parameters>)| table 0-row-3 1-row-3 2-row-3 | ||
|---|---|---|
| 参数 | 类型 | 描述 |
| listToProcess | listString、listBoolean、listInteger、listDecimal、listDuration、listDateTime、listDateTimeOnly、listDateOnly或listObject | 要处理的列表。 对于listObject,它必须是字段引用。 |
| keyAttributeName | 字符串 | 此参数是可选的,并且仅适用于listObject。 如果未提供参数,则当所有属性都具有相同的值时,会将对象视为重复。 否则,如果给定的属性具有相同的值,则将对象视为重复。 |
distinct(<listInteger>)
返回整数列表。
distinct(<listDecimal>)
返回小数位数列表。
distinct(<listString>)
返回字符串列表。
distinct(<listDateTimeOnly>)
返回不考虑时区的日期时间列表。
distinct(<listDateTime>)
返回日期时间列表。
distinct(<listDateOnly>)
返回日期列表。
distinct(<listBoolean>)
返回布尔值列表。
distinct(<listDuration>)
返回持续时间列表。
distinct(<listObject>)
distinct(<listObject>,<string>)
返回对象列表。
distinct([10,2,10,null])
返回[10, 2]。
distinctWithNull distinctWithNull
返回给定列表的不同值或对象。 如果列表至少有一个null条目,则返回的列表中将显示一个null条目。
distinctWithNull(<parameters>)| table 0-row-3 1-row-3 | ||
|---|---|---|
| 参数 | 类型 | 描述 |
| listToProcess | listString、listBoolean、listInteger、listDecimal、listDuration、listDateTime、listDateTimeOnly、listDateOnly | 要处理的列表。 |
distinctWithNull(<listInteger>)
返回整数列表。
distinctWithNull(<listDecimal>)
返回小数位数列表。
distinctWithNull(<listString>)
返回字符串列表。
distinctWithNull(<listDateTimeOnly>)
返回不考虑时区的日期时间列表。
distinctWithNull(<listDateTime>)
返回日期时间列表。
distinctWithNull(<listDateOnly>)
返回日期列表。
distinctWithNull(<listBoolean>)
返回布尔值列表。
distinctWithNull(<listDuration>)
返回持续时间列表。
distinctWithNull([10,2,10,null])
返回[10, 2, null]
注意:此函数不支持参数<listObject>。
filter filter
返回一个listObject,其中的对象具有匹配给定键值之一的键属性。
filter(<parameters>)| table 0-row-3 1-row-3 2-row-3 3-row-3 | ||
|---|---|---|
| 参数 | 类型 | 描述 |
| listToFilter | listObject | 要过滤的对象列表。 它必须是字段引用。 |
| keyAttributeName | 字符串 | 给定列表对象中的属性名称,用作筛选键 |
| keyValueList | list | 用于过滤的键值数组 |
filter(listObject, string, listString)
filter(listObject, string, listInteger)
filter(listObject, string, listDecimal)
filter(listObject, string, listDateTime)
filter(listObject, string, listDateTimeOnly)
filter(listObject, string, listDateOnly)
filter(listObject, string, listDuration)
filter(listObject, string, listBoolean)
返回listObject。
以下是在传入事件“myevent”中传递的有效负载示例:
| code language-json |
|---|
|
您可以使用以下表达式:
| code language-json |
|---|
|
返回包含两个对象的listObject,其中“product2”和“product3”作为ID。
getListItem getListItem
返回给定索引处的列表项。
getListItem(<parameters>)| table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 6-row-2 7-row-2 8-row-2 9-row-2 | |
|---|---|
| 参数 | 类型 |
| list | listString |
| list | listBoolean |
| list | listInteger |
| list | listDecimal |
| list | listDuration |
| list | listDateTime |
| list | listDateTimeOnly |
| list | listDateOnly |
| index | 整数 |
getListItem(<listInteger>,<index>)
返回整数。
getListItem(<listDecimal>,<index>)
返回小数。
getListItem(<listString>,<index>)
返回字符串。
getListItem(<listDateTimeOnly>,<index>)
返回不考虑时区的日期时间。
getListItem(<listDateTime>,<index>)
返回日期时间。
getListItem(<listDateOnly>,<index>)
返回日期列表。
getListItem(<listBoolean>,<index>)
返回布尔值。
getListItem(<listDuration>,<index>)
返回持续时间。
getListItem([10, 2, 3], 1)
返回“2”
getListItem(["A", "B", "C"], 2)
返回“C”
具有事件字段"event.appVersion"且值为"20.45.2.3434"的示例
split(@event{event.appVersion}, "\\.")
返回["20", "45", "2", "3434"]
getListItem(split(@event{event.appVersion}, "\\."), 0)
返回“20”
in in
检查第一个参数值是否在列表中。 检查通过对每个参数值执行Equal。 如果找到参数值,则返回true;否则,返回false。
<expression>的类型必须与列表项匹配。 作为提醒,列表的项目类型必须匹配。
in(<parameters>)| table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 6-row-2 7-row-2 8-row-2 9-row-2 10-row-2 11-row-2 12-row-2 13-row-2 14-row-2 15-row-2 | |
|---|---|
| 参数 | 类型 |
| 字符串 | 字符串 |
| 布尔值 | 布尔值 |
| 整数 | 整数 |
| 小数 | 小数 |
| 持续时间 | 持续时间 |
| 日期时间 | 日期时间 |
| DateTimeOnly | DateTimeOnly |
| 列表 | listString |
| 列表 | listBoolean |
| 列表 | listInteger |
| 列表 | listDecimal |
| 列表 | listDuration |
| 列表 | listDateTime |
| 列表 | listDateTimeOnly |
| 列表 | listDateOnly |
in(<integer>,<listInteger>)
in(<decimal>,<listDecimal>)
in(<string>,<listString>)
in(<boolean>,<listBoolean>)
in(<dateTimeOnly>,<listDateTimeOnly>)
in(<dateTime>,<listDateTime>)
in(<dateOnly>,<listDateOnly>)
in(<duration>,<listDuration>)
返回布尔值。
in(4,[4,5,3,4])
返回真。
in(8,[4,5,3,4])
返回假。
in(#{ExperiencePlatform.ProfileFieldGroup.profile.person.gender}, ["male"])
intersect intersect
返回两个输入列表中的公用值。 如果两个列表之一为null,则返回空列表。
intersect(<parameters>)| table 0-row-2 1-row-2 2-row-2 | |
|---|---|
| 参数 | 类型 |
| 列表1 | list |
| 列表2 | list |
intersect(listString,listString):列表字符串
intersect(listDecimal,listDecimal): listDecimal
intersect(listInteger,listInteger): listInteger
intersect(listDateTime,listDateTime): listDateTime
intersect(listDateTimeOnly,listDateTimeOnly): listDateTimeOnly
intersect(listDateOnly,listDateOnly): listDateOnly
intersect(listDuration,listDuration): listDuration
intersect(listBoolean,listBoolean):列表布尔值
返回列表。
| code language-json |
|---|
|
返回[“sports”,“news”]
| code language-json |
|---|
|
返回配置文件属性和给定类别列表之间的通用项目。
| code language-json |
|---|
|
返回用户档案属性和给定事件字段之间的公用项。
limit limit
返回列表的第一个或最后的N个元素。
limit(<parameters>)| table 0-row-3 1-row-3 2-row-3 3-row-3 | ||
|---|---|---|
| 参数 | 类型 | 描述 |
| listToProcess | listString、listBoolean、listInteger、listDecimal、listDuration、listDateTime、listDateTimeOnly、listDateOnly或listObject | 要考虑的列表。 对于listObject,它必须是字段引用。 |
| 项目数 | 整数 | 要从给定列表中返回的项目数。 |
| firstOrLastItems | 布尔 | 此参数是可选的(默认为true)。 true返回第一项。 false返回最后一个项目。 |
limit(<listString>,<integer>)
limit(<listString>,<integer>,<boolean>)
返回字符串列表。
limit(<listInteger>,<integer>)
limit(<listInteger>,<integer>,<boolean>)
返回整数列表。
limit(<listDecimal>,<integer>)
limit(<listDecimal>,<integer>,<boolean>)
返回小数位数列表。
limit(<listBoolean>,<integer>)
limit(<listBoolean>,<integer>,<boolean>)
返回布尔值列表。
limit(<listDateOnly>,<integer>)
limit(<listDateOnly>,<integer>,<boolean>)
返回日期列表。
limit(<listDateTimeOnly>,<integer>)
limit(<listDateTimeOnly>,<integer>,<boolean>)
返回不考虑时区的日期时间列表。
limit(<listDateTime>,integer>)
limit(<listDateTime>,<integer>,<boolean>)
返回日期时间列表。
limit(<listDuration>,<integer>)
limit(<listDuration>,<integer>,<boolean>)
返回持续时间列表。
limit(<listObject>,<integer>)
limit(<listObject>,<integer>,<boolean>)
返回对象列表。
limit(["A", "B", "C", "D", "E"], 3)
返回["A","B","C"]。
limit(["A", "B", "C", "D", "E"], 3, false)
返回["C","D","E"]。
listSize listSize
计算列表中的元素数。
listSize(<parameters>)| table 0-row-3 1-row-3 | ||
|---|---|---|
| 参数 | 类型 | 描述 |
| listToProcess | listString、listBoolean、listInteger、listDecimal、listDuration、listDateTime、listDateTimeOnly、listDateOnly或listObject | 要处理的列表。 对于listObject,它必须是字段引用。 listObject不能包含null对象。 |
listSize(<listInteger>)
listSize(<listDecimal>)
listSize(<listString>)
listSize(<listBoolean>)
listSize(<listDateTimeOnly>)
listSize(<listDateTime>)
listSize(<listDateOnly>)
listSize(<listDuration>)
返回整数。
listSize(<listObject>)
listSize([10,2,3])
返回3。
listSize(@event{my_event.productListItems})
返回给定对象数组(listObject类型)中的对象数。
serializeList serializeList
将给定列表(除listObject之外的任何类型)转换为字符串。
serializeList(<parameters>)| table 0-row-3 1-row-3 2-row-3 3-row-3 | ||
|---|---|---|
| 参数 | 类型 | 描述 |
| listToProcess | listString、listBoolean、listInteger、listDecimal、listDuration、listDateTime、listDateTimeOnly、listDateOnly | 要转换为字符串的列表。 |
| 分隔符 | 字符串 | 输出字符串中每个列表元素之间的分隔符。 |
| addQuotes | 布尔 | 此参数指示输出字符串中的每个元素是否应包含引号(true)或(false)。 |
serializeList(<listInteger>,<string>,<boolean>)
serializeList(<listDecimal>,<string>,<boolean>)
serializeList(<listString>,<string>,<boolean>)
serializeList(<listBoolean>,<string>,<boolean>)
serializeList(<listDateTimeOnly>,<string>,<boolean>)
serializeList(<listDateTime>,<string>,<boolean>)
serializeList(<listDateOnly>,<string>,<boolean>)
serializeList(<listDuration>,<string>,<boolean>)
返回字符串。
serializeList(["Hello","World"], " ", false)
返回“Hello World”。
serializeList(["Hello", "World"], ",", true)
返回“Hello”、“World”。
sort sort
以自然顺序对值列表或对象进行排序。
sort(<parameters>)| table 0-row-3 1-row-3 2-row-3 3-row-3 | ||
|---|---|---|
| 参数 | 类型 | 描述 |
| listToSort | listString、listBoolean、listInteger、listDecimal、listDuration、listDateTime、listDateTimeOnly、listDateOnly或listObject | 要排序的列表。 对于listObject,它必须是字段引用。 |
| keyAttributeName | 字符串 | 此参数仅适用于listObject。 给定列表中的对象中的属性名称用作排序的键。 |
| sortingOrder | 布尔 | 升序(true)或降序(false) |
sort(<listInteger>,<boolean>)
返回整数列表。
sort(<listDecimal>,<boolean>)
返回小数位数列表。
sort(<listString>,<boolean>)
返回字符串列表。
sort(<listDateTimeOnly>,<boolean>)
返回不考虑时区的日期时间列表。
sort(<listDateTime>,<boolean>)
返回日期时间列表。
sort(<listDateOnly>,<boolean>)
返回日期列表。
sort(<listBoolean>,<boolean>)
返回布尔值列表。
sort(<listObject>,<string>,<boolean>)
返回对象列表。
sort(["A", "C", "B"], true)
返回["A","B","C"]。
sort([1, 3, 2], false)
返回[3, 2, 1]。
sort(@event{my_event.productListItems}, "SKU", true)
返回按SKU属性排序的listObject(升序)
本节包含结构化知识,用于支持与本主题相关的解释、检索和问答。
要全面了解相关信息,应将此信息与本页上的文档相结合。 这两个源都不是独立的;页面描述了功能,而本节提供了其他上下文来帮助消除术语、意图、适用性和约束条件的歧义。
- TL;DR:本页记录了AJO历程表达式中可用的所有列表函数,包括如何过滤、排序、去重、检查成员资格、限制、序列化和查找列表与数组的交集。
意图:
- 使用
distinct(忽略null)或distinctWithNull(保留null)从列表中删除重复的值 - 筛选listObject以仅返回使用
filter匹配特定键值的对象 - 使用
getListItem从列表中检索特定索引处的元素 - 使用
in检查列表中是否存在值 - 使用
intersect查找两个列表之间的通用元素 - 使用
limit返回列表的第一或最后的N个元素 - 使用
listSize计算列表中的元素总数 - 使用
serializeList将列表转换为分隔字符串 - 使用
sort按升序或降序对列表排序
术语表:
- listObject:必须是字段引用的复杂对象列表;不能包含null对象(产品特定)
- keyAttributeName:与
distinct、filter和sort一起使用的可选字符串参数,用于标识要用于重复数据删除、筛选或排序 (产品特定) 的对象属性 - intersect: set操作仅返回两个输入列表中存在的元素
护栏:
distinctWithNull不支持<listObject>参数类型filter要求listObject参数是字段引用,而不是内联文本- listObject上的
listSize要求列表是字段引用;listObject不能包含null对象 serializeList不支持listObject类型
术语:
- 规范名称:列表函数 — 首字母缩略词:none — 变体:集合函数,数组函数
- 同义词: “listSize” = “count list elements”; “serializeList” = “join list to string”
- 请勿混淆:“distinct”(忽略null)≠“distinctWithNull”(保留null作为非重复值)
- 请勿混淆:“limit”与第三个参数
true(返回前N项)≠“limit”与false(返回后N项) - 请勿混淆:“相交”(两个列表之间的通用元素)≠“筛选”(匹配特定键值的元素)
常见问题解答:
- 问:如何获取列表的前3项? — 使用
limit(myList, 3)或limit(myList, 3, true);默认返回第一个项目。 - 问:如何获取列表的最后3项? — 使用
limit(myList, 3, false)。 - 问:
distinct与distinctWithNull之间有何区别? —distinct忽略null值并从结果中将其排除;distinctWithNull将null视为不同的值,如果存在null,则包含一个null条目。 - 问:我是否可以使用
filter筛选字符串列表? — 否,filter仅适用于listObject;对于标量列表,使用in或distinct删除重复项。 - 问:如何检查值是否在列表中? — 使用
in(value, myList),如果在列表中找到值则返回true。 - 问:我是否可以根据特定属性对listObject进行排序? — 是,使用
sort(@event{...}, "attributeName", true),其中第二个参数是属性名称,第三个参数是排序方向(true =升序)。