VKP
VKP

Reputation: 658

How to Identify last element in an Array in Dataweave

i have a dataweave expression to create a custom String , but i do not want to append || to the last element of the input array . How can i achieve it ?

    %dw 2.0
    output application/json
    var arr = ["ABC","XYZ"]
    ---
    arr  map((item,index) -> {
        index: "custom ('" ++ item ++ "'); " ++ "||"
    })

Upvotes: 0

Views: 1611

Answers (3)

Michael Jones
Michael Jones

Reputation: 1910

Out of curiosity, are you then taking this resulting array and joining it into a string? Your question seems to indicate the end goal of the function is returning a string. If you are, you can just map and then joinBy

%dw 2.0
output application/json
var arr = ["ABC","XYZ", "DKJL"]
---
arr map "custom($($));" joinBy " || "

Outputs

"custom(ABC); || custom(XYZ); || custom(DKJL);"

And if like in Salim's answer you shouldn't be wrapping the last value in custom, you could also take advantage of the default behavior of reduce:

%dw 2.0
output application/json
var arr = ["ABC","XYZ", "DKJL"]
---
arr[-1 to 0] reduce ("custom($($)); || " ++ $$)

Outputs

"custom(ABC); || custom(XYZ); || DKJL"

Upvotes: 0

Salim Khan
Salim Khan

Reputation: 4303

You could also try with the following:

%dw 2.0
output application/json
import * from dw::core::Arrays
var arr = ["ABC","XYZ"]
---
take(arr,(sizeOf(arr)-1)) map (
     $ ++ "||" // do your manipulation to modify the custom entry
)

take is documented here

Upvotes: 0

Salim Khan
Salim Khan

Reputation: 4303

Would this help?

Script

%dw 2.0
output application/json
var arr = ["ABC","XYZ"]
---
arr  map((item,index) -> {
    index: if((index) < (sizeOf(arr)-1)) "custom ('" ++ item ++ "'); " ++ "||" else item
})

Output

[
  {
    "index": "custom ('ABC'); ||"
  },
  {
    "index": "XYZ"
  }
]

Upvotes: 2

Related Questions