DataWeave has a zip
function in the dw::Core
module. The function will merge two arrays into a new array. Each element in the new array is also an array and will have a value from the two original arrays from the same index grouped together. So for example we have an input array ["A", "B"]
and another input array [1, 2]
. The result of the zip
function will be [["A", 1], ["B", 2]]
. The size of the resulting array is the same as the minimal size of both input arrays. Any value from an array that cannot be merged is simply ignored and left out of the resulting array.
In the following code example we use the zip
function for different arrays:
Source
%dw 2.0 import take from dw::core::Arrays var fruit = ["Apple", "Pear", "Banana"] var prices = [2.30, 1.82, 2.06] output application/json --- { // Create new array where each element is // an array with first element a fruit and // second element a price value. zip: fruit zip prices, // When we have an array that contains arrays // of 2 items (a pair) we can easily turn it into an object // with key/value pairs using reduce. zipObj: fruit zip prices reduce ((item, acc = {}) -> acc ++ {(item[0]): item[1]}), // The resulting array will have no more items // then the smallest array that is used with the zip function. // In the following example the second array only has 2 items // so the resulting array also has 2 items in total. // The fruit "Banana" is now ignored. zipMinimal: fruit zip (prices take 2) }
Source
{ "zip": [ [ "Apple", 2.30 ], [ "Pear", 1.82 ], [ "Banana", 2.06 ] ], "zipObj": { "Apple": 2.30, "Pear": 1.82, "Banana": 2.06 }, "zipMinimal": [ [ "Apple", 2.30 ], [ "Pear", 1.82 ] ] }
Written with DataWeave 2.4.