03-23-2021 03:11 AM
Hello All,
I stumbled upon a requirement this morning and would like some help/suggestions to work ahead on the solution. I am looking for a way to copy an object inside an array for 36 times while incrementing a specific key inside the object which is a date field.
Example Input:
[
{
"valueName": "ABC",
"date": "01/01/2021",
"someKey": "someValue"
},
{
"valueName": "XYZ",
"date": "05/01/2021",
"someKey": "someValue"
}
]
Example Output:
[
{
"valueName": "ABC",
"date": "01/01/2021",
"someKey": "someValue"
},
{
"valueName": "ABC",
"date": "02/01/2021",
"someKey": "someValue"
},
.
.
.
**Copied 36 times with only the month part getting incremented for 36 times**
{
"valueName": "XYZ",
"date": "05/01/2021",
"someKey": "someValue"
},
{
"valueName": "XYZ",
"date": "06/01/2021",
"someKey": "someValue"
}
.
.
.
**Copied 36 times with only the month part getting incremented for 36 times**
]
Only the date key will be incremented each time the object is copied, date key is following a date format of “MM/dd/yyyy” and only MM has to be incremented.
Please advise how this can be achieved using SnapLogic.
Solved! Go to Solution.
03-23-2021 05:11 AM
Hello @Tanmay_Sarkar,
You can use the following expression :
sl.range(36).map(x=>$.mapValues((value,key) => key == ‘date’ ? Date.parse(value).plusDays(x).toLocaleDateString({“format”:“MM/dd/yyyy”}) : value))
What it does is the following, the sl.range() function will produce an array of numbers from 0 to 35. On every (x) member of the array, it’s mapping the incoming document, where if the “key” is “date” , increment the date for (x) days, else map the field with no changes.
Best regards,
Bojan Velevski
03-23-2021 05:11 AM
Hello @Tanmay_Sarkar,
You can use the following expression :
sl.range(36).map(x=>$.mapValues((value,key) => key == ‘date’ ? Date.parse(value).plusDays(x).toLocaleDateString({“format”:“MM/dd/yyyy”}) : value))
What it does is the following, the sl.range() function will produce an array of numbers from 0 to 35. On every (x) member of the array, it’s mapping the incoming document, where if the “key” is “date” , increment the date for (x) days, else map the field with no changes.
Best regards,
Bojan Velevski
03-23-2021 05:44 AM
Hello @bojanvelevski
Hope you’re doing good. This worked. You’re a savior. I scratched my head all day thinking about this. It never occurred to me that sl.range() could be used like this.
Thanks a lot.
Regards,
Tanmay Sarkar