merge

Keys a slice of maps by the named field, producing a lookup map.

It is an alias for the map modifier, useful when the name "map" reads awkwardly or clashes with other syntax.

InputArgumentsReturns[]map[string]anystringmap[string]map[string]any
Source
BasicSource

Keys a slice of maps by the named field exactly as Map does.

Given

{"users": [{"id": "u1", "name": "Alice"}, {"id": "u2", "name": "Bob"}]}

Template

{{ users | merge:'id' }}

Result

{
  "u1": {
    "id": "u1",
    "name": "Alice"
  },
  "u2": {
    "id": "u2",
    "name": "Bob"
  }
}
By skuSource

Turns a list of products into a table keyed by sku.

Given

{"products": [{"sku": "A1", "name": "Bolt"}, {"sku": "B2", "name": "Nut"}]}

Template

{{ products | merge:'sku' }}

Result

{
  "A1": {
    "name": "Bolt",
    "sku": "A1"
  },
  "B2": {
    "name": "Nut",
    "sku": "B2"
  }
}
MissingSource

Skips any element without the key field.

Given

{"products": [{"sku": "A1", "name": "Bolt"}, {"name": "Loose"}]}

Template

{{ products | merge:'sku' }}

Result

{
  "A1": {
    "name": "Bolt",
    "sku": "A1"
  }
}
OverwriteSource

Keeps the last element when a key repeats.

Given

{"products": [{"sku": "A1", "name": "Old"}, {"sku": "A1", "name": "New"}]}

Template

{{ products | merge:'sku' }}

Result

{
  "A1": {
    "name": "New",
    "sku": "A1"
  }
}