问题描述
有效载荷:
[
{
"Contacts": "123456,098765","Emails" : ""
},{
"Contacts": "ABC123","Emails" : ""
}
]
如何从以下对象数组中获取所有电子邮件的列表,其中联系人 ID 与有效负载中的每一行相匹配? (下面的预期输出)
可变accConts
{
"queryResponse": [
{
"Email": "test123@test.com","SalesforceId": "123456"
},{
"Email": "test@test.com","SalesforceId": "098765"
},{
"Email": "ABC@test.com","SalesforceId": "ABC123"
}
]
}
预期输出:
[
{
"Contacts": "123456,"Emails" : "test123@test.com,test@test.com"
},"Emails" : "ABC@test.com"
}
]
解决方法
HTH..
%dw 2.0
output application/json
var qResp ={
"queryResponse": [
{
"Email": "test123@test.com","SalesforceId": "123456"
},{
"Email": "test@test.com","SalesforceId": "098765"
},{
"Email": "ABC@test.com","SalesforceId": "ABC123"
}
]
}
---
payload filter ($.Contacts != null) map using (iter = $$) {
"Contacts" : $.Contacts,"Emails": (qResp.queryResponse filter (payload[iter].Contacts contains $.SalesforceId)) reduce ((item,acc = "") -> (acc ++ "," ++ item.Email)[1 to -1]
)
}
,
我接受了 Salim Khan 的回答,因为他指导我朝着正确的方向以及让电子邮件起作用的逻辑。我只需要重新设计地图逻辑,
Option Explicit
Sub copyNonAdjacentColumns()
' Constants
Const sCols As String = "A:A,C:C,F:F"
' Workbook
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
' Source
Dim sws As Worksheet: Set sws = wb.Worksheets("Sheet1")
Dim sLastRow As Long
sLastRow = sws.Range("A" & sws.Rows.Count).End(xlUp).Row
Dim srg As Range
Set srg = Intersect(sws.Range(sCols),sws.Rows("2:" & sLastRow))
' Destination
Dim dws As Worksheet: Set dws = wb.Worksheets("Sheet2")
Dim dCell As Range: Set dCell = dws.Range("A2")
' Copy
srg.Copy dCell ' A,C,F to A,B,C
End Sub
,
希望这个comaprision有帮助
,想要添加一个稍微简洁的解决方案来展示另一种方法。
%dw 2.0
output application/json
var qResp =
{
"queryResponse": [
{
"Email": "test123@test.com","SalesforceId": "ABC123"
}
]
}
---
payload map (value) ->
{
'Contacts':value.Contacts,'Emails': qResp.queryResponse[?(value.Contacts contains $.SalesforceId)]..Email joinBy ","
}