cancel
Showing results forย 
Search instead forย 
Did you mean:ย 

How to identify matching values to create sequence numbers?

acesario
Contributor II

Looking for a function to help add sequence numbers to a json array. End goal is to apply a sequence to matching values, starting with 01, subsequent values get a sequence of 02โ€ฆ03โ€ฆ 04 etc. I could do this in a mapper, or in apache velocity as part of a soap execute if possible to loop through, and apply therein.

What I have now:
[
{
โ€œRecordsโ€: [
{
โ€œAwardโ€: [
โ€œAward_Aโ€,
โ€œAward_Cโ€,
โ€œAward_Aโ€,
โ€œAward_Bโ€,
โ€œAward_Cโ€
]
}
]
}
]

Desired output:
[
{
โ€œRecordsโ€: [
{
โ€œAwardโ€: [
โ€œAward_Aโ€,
โ€œAward_Cโ€,
โ€œAward_Aโ€,
โ€œAward_Bโ€,
โ€œAward_Cโ€
],
โ€œSequenceโ€: [
โ€œ01โ€,
โ€œ01โ€,
โ€œ02โ€,
โ€œ01โ€,
โ€œ02โ€
]
}
]
}
]

1 ACCEPTED SOLUTION

j_angelevski
Contributor III

@acesario , you can also just add [0] after @viktor_nโ€™s expression.

$Records.map(record => record.Award.map((x, index) => record.Award.slice(0, index + 1).filter(y => y == x).length))[0]

And if you really need the โ€œ0โ€ you can try and add .map(val => "0" + val)

So full expression is: $Records.map(record => record.Award.map((x, index) => record.Award.slice(0, index + 1).filter(y => y == x).length).map(val => "0" + val))[0]

View solution in original post

15 REPLIES 15

viktor_n
Contributor II

Hi @acesario,

Hope this will solve your problem.

Expression:
$Records.map(record => record.Award.map((x, index) => record.Award.slice(0, index + 1).filter(y => y == x).length))
Answer1

Output:
Output1

acesario
Contributor II

@viktor_n Thanks for the response, great use of map approach! One thing I notice is that your resulting Sequence has a separate array for the sequence values [[1,1,2,1,2]] rather than
โ€œSequenceโ€: [โ€œ01โ€,โ€œ01โ€,โ€œ02โ€,โ€œ01โ€,โ€œ02โ€]

@acesario try this one.
$Records.map(record => {"Award": record.Award, "Sequence": record.Award.map((x, index) => record.Award.slice(0, index + 1).filter(y => y == x).length.toString())})

j_angelevski
Contributor III

@acesario , you can also just add [0] after @viktor_nโ€™s expression.

$Records.map(record => record.Award.map((x, index) => record.Award.slice(0, index + 1).filter(y => y == x).length))[0]

And if you really need the โ€œ0โ€ you can try and add .map(val => "0" + val)

So full expression is: $Records.map(record => record.Award.map((x, index) => record.Award.slice(0, index + 1).filter(y => y == x).length).map(val => "0" + val))[0]