how do i use a filter in a map?

I put all the input data inside the script to simplify reproduction. The problem seems to be using the operator == to compare a string and a key types returns empty. Using the operator ~= which attempts to coerce appears to return the expected result:

%dw 2.0 
output application/json 
var attributeIdMapping =
{
    "attributes": [
        {
            "name": "accountType",
            "id": "87"
        },
        {
            "name": "accountClass",
            "id": "89"
        },
        {
            "name": "accountName",
            "id": "85"
        },
        {
            "name": "displayName",
            "id": "18"
        },
        {
            "name": "accountCategory",
            "id": "88"
        },
        {
            "name": "accountNumber",
            "id": "84"
        },
        {
            "name": "description",
            "id": "86"
        },
        {
            "name": "accountGroup",
            "id": "90"
        }
    ]
}
var requestBody = {
    "displayName": "TestMulesoft2",
    "description": "Test"
}
--- {
     "objectTypeId": 3,
     "attributes": requestBody mapObject (value, key) ->
        {
            "objectTypeAttributeId": (attributeIdMapping.attributes filter ($.name ~= key))[0].id,
            "objectAttributeValues": [{
             "value": value,
             "key": key
         }] 
        } }

Output:

{
  "objectTypeId": 3,
  "attributes": {
    "objectTypeAttributeId": "18",
    "objectAttributeValues": [
      {
        "value": "TestMulesoft2",
        "key": "displayName"
      }
    ],
    "objectTypeAttributeId": "86",
    "objectAttributeValues": [
      {
        "value": "Test",
        "key": "description"
      }
    ]
  }
}

CLICK HERE to find out more related problems solutions.

Leave a Comment

Your email address will not be published.

Scroll to Top