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
相关产品推荐
相关产品推荐

