我有json的请求和预期的响应,如下所述。它需要group pByclientItemCode
,我在中途卡住了在同一个地方循环。使用了MapObject
和减少
函数的组合。任何帮助都将不胜感激。
[
{
"ClientCode": "1",
"ClientItemCode": "245",
"LocationId": "CLOSED"
},
{
"ClientCode": "1",
"ClientItemCode": "245",
"LocationId": "OPEN"
},
{
"ClientCode": "2",
"ClientItemCode": "245",
"LocationId": "CHECKOUT"
},
{
"ClientCode": "2",
"ClientItemCode": "245",
"LocationId": "TEST"
},
{
"ClientCode": "1",
"ClientItemCode": "123",
"LocationId": "OPEN"
},
{
"ClientCode": "1",
"ClientItemCode": "123",
"LocationId": "CLOSED"
}
]
预期响应:
<Results>
<Result>
<ClientItemCode>123<ClientItemCode>
<ResultLines>
<ResultLine>
<ClientCode>1</ClientCode>
<From>
<LocationId>OPEN</LocationId>
</From>
<To>
<LocationId>CLOSED</LocationId>
</To>
</ResultLine>
<ResultLine>
<ClientCode>2</ClientCode>
<From>
<LocationId>CHECKOUT</LocationId>
</From>
<To>
<LocationId>TEST</LocationId>
</To>
</ResultLine>
</ResultLines>
</Result>
<Result>
<CientItemCode>245<ClientItemCode>
<ResultLines>
<ResultLine>
<ClientCode>1</ClientCode>
<From>
<LocationId>CLOSED</LocationId>
</From>
<To>
<LocationId>OPEN</LocationId>
</To>
</ResultLine>
</ResultLines>
</Result>
</Results>
假设打开和/或关闭可能丢失:
%dw 2.0
output application/xml
---
Results: payload groupBy $.ClientItemCode
mapObject ((value, key, index) -> result: {
ClientItemCode: key,
ResultLines: {
From: if (value.LocationId contains "OPEN") LocationId: "OPEN" else null,
To: if (value.LocationId contains "CLOSED") LocationId: "CLOSED" else null
}
}
)
输出:
<?xml version='1.0' encoding='UTF-8'?>
<Results>
<result>
<ClientItemCode>245</ClientItemCode>
<ResultLines>
<From>
<LocationId>OPEN</LocationId>
</From>
<To>
<LocationId>CLOSED</LocationId>
</To>
</ResultLines>
</result>
<result>
<ClientItemCode>123</ClientItemCode>
<ResultLines>
<From>
<LocationId>OPEN</LocationId>
</From>
<To>
<LocationId>CLOSED</LocationId>
</To>
</ResultLines>
</result>
</Results>
这是我想出来的,如果我有更多的时间投入,可能会简化一点。试一试:
%dw 2.0
output application/xml
var data = [
{
"ClientCode": "1",
"ClientItemCode": "245",
"LocationId": "CLOSED"
},
{
"ClientCode": "1",
"ClientItemCode": "245",
"LocationId": "OPEN"
},
{
"ClientCode": "2",
"ClientItemCode": "245",
"LocationId": "CHECKOUT"
},
{
"ClientCode": "2",
"ClientItemCode": "245",
"LocationId": "TEST"
},
{
"ClientCode": "1",
"ClientItemCode": "123",
"LocationId": "OPEN"
},
{
"ClientCode": "1",
"ClientItemCode": "123",
"LocationId": "CLOSED"
}
]
---
// I assume that your data are ordered and all the records that will be From and To
// are paired with one another. It is doable without making such assumption but the
// algorithm will get complex.
results: do {
// Group by the data
var groupedData = data map {($),(From: true) if (isEven($$))} groupBy $.ClientItemCode
// Order the client Ids
var orderedClientIds = groupedData pluck $$ orderBy $ as Number
---
orderedClientIds reduce (cId, results={}) -> do {
var clientItemCode = cId
var groupedByClientICode = groupedData[cId] groupBy $.ClientCode pluck $
---
results ++ {result: {
ClientItemCode: clientItemCode,
ResultLines: groupedByClientICode reduce (cliCode, lines={}) -> do {
var clientCode = cliCode[0].ClientCode
---
lines ++ {
ClientCode: clientCode,
ResultLine: cliCode reduce (e, acc={}) -> do {
var locRec = {LocationId: e.LocationId}
---
acc ++ (if (e.From?) {From: locRec } else {To: locRec})
}
}
}
}}
}
}
当我在注释中复制时,我还做了一个假设:我假设您的数据是有序的,并且所有将成为From
和To
的记录都彼此配对。
编辑:再次编辑代码,以强制对< code>ClientItemCode进行排序,然后在创建< code>result标记的所有转换之前按顺序访问每个值。剩下的代码几乎和以前一样。不知道为什么一个简单的< code>orderBy对你没有用,但对我有用。
问题内容: 我见过类似的问题,但没有一个提供我所要的答案,因此,如果这被认为是重复的,我在此致歉。我正在尝试将数组{1,2,3}和{4,5,6}合并为{1,2,3,4,5,6}。我做错了什么?我是java的新手。抱歉,问题很愚蠢。 问题答案: 代替 您需要调用merge方法,并将结果分配给数组,例如: 您的for循环也应该是:
问题内容: 我有两个数组。 我需要合并这些数组,并在下拉列表中显示为 我怎么能使用swift.im新手来快速获得此结果,有人可以帮忙吗? 问题答案: 压缩数组并连接结果:
我正在努力实现这样的目标。这是一个虚构的例子,表达了这个意图。 我希望所有可完成的未来都能执行,并将所有结果合并为一个结果,然后返回。因此,对于下面的示例,集合allResults应该有字符串“1”、“2”、“3”,每个字符串有3次。我希望它们都并行运行,而不是串行运行。 任何关于未来我可以使用什么API来实现这一点的建议都会非常有用。
问题内容: 考虑下表, 我如何获得以下结果 尝试过的形式但未获得正确的结果,数学将始终放在Subject_1之下,而Science总是在SUbject_2之下。 问题答案: 使用: 最大限度 通过…分组 SQL>选择名称, 2个最大(subject_1)subject_1, 3个最大(marks_1)个marks_1, 4个MAX(subject_2)subject_2, 5个最大(marks_2
关于php数组合并的问题,如何把两个不同的二维数组,合并成一个二维数据?
我想扫描一个整数,并把它放在一个while循环,以便如果输入了一个无效的条目,程序将要求输入另一个整数,但当我运行它时,它不允许我输入和新的整数,只是多次打印无效条目。