在计算对象字段中数组中字符串出现的次数时遇到问题。
下面的XML有3个“ Level3”项,每个项有1个“ TextLine”字段。
我需要计算变量'texts'中的每个文本在有效载荷中出现的次数。
fun getVasCount(texts) =
sizeOf (Level1.*Level2.*Level3.*TextLine filter (texts contains $))
所以没有得到count:2我得到了count:3,因为'a text'是'This is a text'的子字符串
var texts = {
"This is a text": "",
"This is another text": ""
}
<?xml version="1.0" encoding="UTF-8"?>
<ns:Level1
xmlns:ns="aaaa:bbbb:cccc:dddd">
<Level2>
<Level3>
<TextLine>This is a text</TextLine>
</Level3>
<Level3>
<TextLine>This is a text</TextLine>
</Level3>
<Level3>
<TextLine>a text</TextLine>
</Level3>
</Level2>
</ns:Level1>
答案 0 :(得分:2)
一种方法是计算每个不同文本的出现次数,这些文本按值分组,并计算每个组中有多少个元素。
然后使用计数修改您的texts
对象。
%dw 2.0
output application/json
var texts = {
"This is a text": "",
"This is another text": ""
}
var textLines = payload.Level1.*Level2.*Level3.*TextLine default []
var grouped = textLines
groupBy $
mapObject (groupValues, text) -> {(text): sizeOf(groupValues)}
---
texts mapObject {($$): grouped[$$] default 0}
结果将是:
{
"This is a text": 2,
"This is another text": 0
}
注意:由于对象是不可变的,因此并没有真正修改texts
,而是创建了一个新对象。