-1

i have a array payload which contains one item and one object . i need to transform the object data then append those one item. i can use below code to transform the object which name is attributes , but how to append that single item like below output.

Script

payload map (item) ->
(
    item.attributes reduce ((item, accumulator={}) -> 
    {
        (accumulator),
        (item.name): item.value
          }
)
)

Output

[
  {
    "store": "007878",
    "inventoryDate": "20201124",
    "varianceArticleNumber": "dddrrr"
  },
  {
     "store": "007878",
    "inventoryDate": "",
    "varianceArticleNumber": ""
  },
    {
     "store": "007878",
    "inventoryDate": "",
    "varianceArticleNumber": ""
  },
    {
     "store": "007878",
    "inventoryDate": "",
    "varianceArticleNumber": ""
  }
]

Input

[
  {
    "store": "007878",
    "attributes": [
      {
        "name": "inventoryDate",
        "value": "20201124"
      },
      {
        "name": "varianceArticleNumber",
        "value": "NF006002CC21140000"
      }      
    ]
  },
  {
    "store": "007878",
    "attributes": null
  },
  {
    "store": "007878",
    "attributes": null
  },
  {
    "store": "007878",
    "attributes": null
  }
]
aled
  • 21,330
  • 3
  • 27
  • 34
maomifadacai
  • 357
  • 2
  • 4
  • 17

1 Answers1

1

One way to achieve this is to have a default value in case item.attributes is null. Doing this all the elements in the input array are processed the same.

output application/json
var defaultAttributes=[
    {
        "name": "inventoryDate",
        "value": ""
    },
    {
        "name": "varianceArticleNumber",
        "value": ""
    }          
]
---
payload map (item) ->
{
    store: item.store,
    (
        
        item.attributes default defaultAttributes reduce ((item, accumulator={}) -> 
            {
                (accumulator),
                (item.name): item.value
            }
        )
    ) 
}

Output:

[
  {
    "store": "007878",
    "inventoryDate": "20201124",
    "varianceArticleNumber": "NF006002CC21140000"
  },
  {
    "store": "007878",
    "inventoryDate": "",
    "varianceArticleNumber": ""
  },
  {
    "store": "007878",
    "inventoryDate": "",
    "varianceArticleNumber": ""
  },
  {
    "store": "007878",
    "inventoryDate": "",
    "varianceArticleNumber": ""
  }
]
aled
  • 21,330
  • 3
  • 27
  • 34