Merge Fields from Separate Objects | MuleSoft Documentation
# Merge Fields from Separate Objects
The DataWeave examples merge fields from separate input arrays. The first (`firstInput`) is a DataWeave variable that lists price by book ID, and the second (`secondInput`) lists authors by book ID. Each book has a unique `bookId` key.
The DataWeave scripts produce the same output. Both scripts use two `map` functions with a filter, and one of them also creates an alias for the `bookId`:
  * The first `map` function iterates over the elements of the `firstInput` array. As the function evaluates each element, a second `map` function uses a filter to identify any elements in the second array (`secondInput`) that match the `filter` criteria (`secondInput filter ($.*bookId contains firstInputValue.bookId)`). The filter returns an element from `secondInput` that contains a `bookId` value that matches the `bookId` value in the `firstInput` element.
  * The second `map` function evaluates that filtered element and then uses `secondInputValue.author` to select and populate the value of its `"author"` field in the object `{author : secondInputValue.author}`.
  * `filter` limits the scope of the second `map` function to objects in the `secondInput` that share the same `bookId`.


DataWeave Script:
```
%dw 2.0
var firstInput = [
 { "bookId":"101",
  "title":"world history",
  "price":"19.99"
 },
 {
  "bookId":"202",
  "title":"the great outdoors",
  "price":"15.99"
 }
]
var secondInput = [
 {
  "bookId":"101",
  "author":"john doe"
 },
 {
  "bookId":"202",
  "author":"jane doe"
 }
]
output application/json
---
firstInput map (firstInputValue) ->
 {
  theId : firstInputValue.bookId as Number,
  theTitle: firstInputValue.title,
  thePrice: firstInputValue.price as Number,
  (secondInput filter ($.*bookId contains firstInputValue.bookId) map (secondInputValue) -> {
   theAuthor : secondInputValue.author
  })
 }
```

Output JSON:
```
[
 {
  "theId": 101,
  "theTitle": "world history",
  "thePrice": 19.99,
  "theAuthor": "john doe"
 },
 {
  "theId": 202,
  "theTitle": "the great outdoors",
  "thePrice": 15.99,
  "theAuthor": "jane doe"
 }
]
```

As the next script shows, you can also write the same script using an `id` alias (created with `using (id = firstInputValue.bookId)`). The alias replaces the selector expression, `firstInputValue.bookId`, which is longer.
DataWeave Script:
```
%dw 2.0
var firstInput = [
 { "bookId":"101",
  "title":"world history",
  "price":"19.99"
 },
 {
  "bookId":"202",
  "title":"the great outdoors",
  "price":"15.99"
 }
]
var secondInput = [
 {
  "bookId":"101",
  "author":"john doe"
 },
 {
  "bookId":"202",
  "author":"jane doe"
 }
]
output application/json
---
firstInput map (firstInputValue) -> using (id = firstInputValue.bookId)
 {
  theValue : id as Number,
  theTitle: firstInputValue.title,
  thePrice: firstInputValue.price as Number,
  (secondInput filter ($.*bookId contains id) map (secondInputValue) -> {
   theAuthor : secondInputValue.author
  })
 }
```

Output JSON:
```
[
 {
  "theValue": 101,
  "theTitle": "world history",
  "thePrice": 19.99,
  "theAuthor": "john doe"
 },
 {
  "theValue": 202,
  "theTitle": "the great outdoors",
  "thePrice": 15.99,
  "theAuthor": "jane doe"
 }
]
```

Both scripts produce the same output.
## Related Examples
  *   * Reference Multiple Inputs
  * 

## See Also
  * DataWeave Selectors
  *