You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ADF Dataflow派生列中动态提取复杂数组的倒数第二个元素

在Azure Data Factory Dataflow派生列中提取动态数组的倒数第二个元素

核心思路

由于Ranks是包含动态键的对象,无法硬编码指定键名,只需两步即可实现需求:

  1. 遍历Ranks的所有键值对,对每个数组提取目标元素
  2. 将处理后的结果重新组织为与原结构一致的键值对象

派生列表达式

直接使用mapObject函数即可完成处理,无需额外转换数组结构:

mapObject(Ranks, (val, key) => elementAt(val, size(val) - 2))

函数说明

  • mapObject(Ranks, (val, key) => ...):遍历Ranks对象的每一组键值对,val代表当前键对应的数组,key代表当前键名,对每个数组执行自定义逻辑后返回新的键值对
  • size(val):获取当前数组的总长度
  • elementAt(val, size(val)-2):数组索引从0开始,最后一个元素的索引为size(val)-1,因此倒数第二个元素的索引是size(val)-2,通过elementAt提取该位置的元素

针对示例的验证(按倒数第二个元素逻辑)

  • 对于3760901的数组,长度为8,提取索引6的元素为5713354
  • 对于21377132011的数组,长度为8,提取索引6的元素为6580356
  • 对于9000000000000000000的数组,长度为10,提取索引8的元素为6580216

若需匹配示例中的目标值(排除最后一个-1后的倒数第二个有效元素)

如果实际需求是提取最后一个-1之前的倒数第二个元素(即示例中的5712962、3212、10031),说明数组是[id, rank, id, rank,...,-1]的成对结构,可使用以下表达式:

mapObject(Ranks, (val, key) => {
    let filteredArr = slice(val, 0, size(val)-1);
    return elementAt(filteredArr, size(filteredArr)-2);
})
  • slice(val, 0, size(val)-1):移除数组最后一个元素-1,得到过滤后的有效数组
  • 对过滤后的数组提取倒数第二个元素,即可得到示例中的目标值

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 16:37:26