Forum Discussion
6 Replies
- Ajay_ChawdaContributor
Hi,
you can use snap.in.totalCount function to get row number.
AC new pipeline 0_2020_03_15.slp (4.5 KB)- wcl3y2New Contributor III
Hello,
I have tried this, but it doesn’t work. I have a mapper where the mapping root is a nested object array. When I use the property that you talk about, it increments for each invoice, not each invoice line within an invoice.
For instance, I have a JSON document with 3 invoices with 5 lines each. I have a separate mapper snap for the line item mapping. When I use the snap.in.totalCount property in the line item mapper, it assigns 1 to each line on the first document, 2 to each line on the second document, and 3 to each line on the third document. I want it to assign line numbers 1, 2, 3, 4, and 5 within each invoice.
- Ajay_ChawdaContributor
Hi,
can you share input and expected output that your are looking.Regards,
Ajay Chawda
- wcl3y2New Contributor III
Sure, here is a simplified version:
Input:
[{
“invoiceNum”: “12345”,
“total”: 100,
“lines”: [{
“qty”: 1,
“unit”: 50,
“extended”: 50
},
{
“qty”: 2,
“unit”: 25,
“extended”: 50
}],},
{
“invoiceNum”: “12346”,
“total”: 150.56,
“lines”: [{
“qty”: 1,
“unit”: 50.56,
“extended”: 50.56
},
{
“qty”: 1,
“unit”: 50,
“extended”: 50
},
{
“qty”: 2,
“unit”: 25,
“extended”: 50
}],
}]Output:
[{
“invoiceNum”: “12345”,
“total”: 100,
“lines”: [{
“lineNumber”: 1,
“qty”: 1,
“unit”: 50,
“extended”: 50
},
{
“lineNumber”: 2,
“qty”: 2,
“unit”: 25,
“extended”: 50
}],},
{
“invoiceNum”: “12346”,
“total”: 150.56,
“lines”: [{
“lineNumber”: 1,
“qty”: 1,
“unit”: 50.56,
“extended”: 50.56
},
{
“lineNumber”: 2,
“qty”: 1,
“unit”: 50,
“extended”: 50
},
{
“lineNumber”: 3,
“qty”: 2,
“unit”: 25,
“extended”: 50
}],
}]- tstackFormer Employee
I think you can use the
.map()method on Array objects to do this since the callback will be passed the current index into the array. The following expression does this:$lines.map((elem, index) => { lineNumber: index + 1, ...elem })The
.map()method will iterate over each element in the$linesarray and execute the given callback function (the part that starts with(elem, index) =>. The callback function creates a new object with the newlineNumberproperty and then uses the spread operator (...elem) to add in the properties from the original array element.Here’s a pipeline that demonstrates this:
Community7085_2020_03_16.slp (3.6 KB)
- wcl3y2New Contributor III
That did the trick. Thank you!