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

DataWeave 2.0中reduce求数组交集失效问题求助

DataWeave中reduce求交集返回空数组的原因及解决方法

问题根源

keysOf()函数返回的是Key类型的数组,而非String类型。即便输出时看起来和字符串一致,底层类型本质不同。你手动定义的keySearch是String数组,类型不匹配导致reduce逻辑里的相等判断失效,自然找不到共同元素。

举个实际例子:如果inputPayload是{"name":"Alice", "age":30},keysOf(inputPayload)实际返回的是[Key("name"), Key("age")],和手动定义的["name", "age"]类型完全不同,此时Key("age") == "age"会返回false,导致交集为空。

解决方法

把keysOf得到的Key数组转换为String数组,用map配合toString()函数统一类型即可:

%dw 2.0
output application/json
var keySearch = ["name", "age", "email"]
// 将Key类型转为String类型
var keysList = keysOf(inputPayload) map (k) -> toString(k)
var intersection = keysList reduce ((item, acc = []) -> 
    if (keySearch contains item) acc << item else acc
)
---
{
    difference: intersection
}

类型统一后,reduce就能正确识别共同元素,返回预期的["age"]。另外补充:DataWeave本身提供了更简洁的交集语法keysList intersect keySearch,如果不需要自定义reduce逻辑,直接用这个方法更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:54:51