Iterar en un Array
Ejercicio
Sección titulada «Ejercicio»Dado el siguiente payload de entrada:
<?xml version="1.0"?><catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> <book id="bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-12-16</publish_date> <description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description> </book> <book id="bk103"> <author>Corets, Eva</author> <title>Maeve Ascendant</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-11-17</publish_date> <description>After the collapse of a nanotechnology society in England, the young survivors lay the foundation for a new society.</description> </book></catalog>Escribí una transformación DataWeave que produzca la siguiente salida:
[ { "index": 0, "id": "bk101", "title": "XML Developer's Guide", "author": "Gambardella, Matthew" }, { "index": 1, "id": "bk102", "title": "Midnight Rain", "author": "Ralls, Kim" }, { "index": 2, "id": "bk103", "title": "Maeve Ascendant", "author": "Corets, Eva" }]Opcional:
- Utilizar lambda para realizar la transformación.
- Para iterar en una lista de elementos, utilizamos la función
map(items: Array<T>, mapper: (item: T, index: Number) -> R)el cual recibe un Array de elementos y una función que se encarga de la transformación de cada elemento. - Se puede resolver de varias maneras, la más fácil y simple es utilizando lambda. Recuerda que al usar lambda para hacer referencia a los parámetros
recibidos de la función utilizamos
$,$$haciendo referencia a los parámetrositemyindex.
Ver solución
Usando Lambda
%dw 2.0output application/json---payload.catalog.*book map { index: $$, id: $.@id, title: $.title, author: $.author}Usando una función
%dw 2.0output application/json
fun transformar(item: Object, index: Number): Object = { index: index, id: item.@id, title: item.title, author: item.author}---map(payload.catalog.*book, transformar)Notas:
- Al utilizar lambda, hacemos referencia al elemento de la lista simplemente con
$ya que es el primer parámetro (el item) delmapperesperado por la funciónmap, al igual que el$$siendo el segundo parámetro que hace referencia al índice. - En el caso de usar una función, debemos de generar una que tenga el formato que la función
mapespera:(item: T, index: Number) -> R. Por ende, la función deTransformarcomo espera un item y un index y devuelve un objeto, es válida para usar dentro de la función de mapeo.
{Code mat;}
Aprendé MuleSoft: cursos, ejercicios y exámenes. Gratis y sin registro.
© 2026 Codebymat