Skip to main content
Version: ACE 5

Deep Merge

Overview

Deep Merge merges the enumerable properties of two or more objects deeply.

The step is based on the deepmerge library.

Configuration

  • Objects to merge (objectPaths) - Array of doc node paths to merge.
    • Object path (objectPaths.objectPath)
  • Custom function options (customFunctionOptionKey) - Function to apply to merge. Choose 'customMerge' to override default merge behavior, 'arrayMerge' to specify how arrays are merged, or 'isMergeableObject' to control cloning/copying behavior.
  • Custom merge function (customMergeFunction) - Function which can be used to override the default merge behavior for a property, based on the property name (e.g (key) => {if (key === "key") { return () => {}}}))
  • Target path (targetPath) - doc node on which to store the merge result

customMerge

Specifies a function which can be used to override the default merge behavior for a property, based on the property name.

If no function is provided uses the default behavior.

arrayMerge

There are multiple ways to merge two arrays, choosing this option will allow you to specify how to merge arrays.

isMergeableObject

By default, deepmerge clones every property from almost every kind of object.

You may not want this, if your objects are of special types, and you want to copy the whole object instead of just copying its properties.

You can accomplish this by passing in a function for the isMergeableObject option.

Examples

Input

{
"garden": {
"flowers": ["roses", "tulips"]
},
"yard": {
"flowers": ["roses", "tulips", "orchids"]
}
}

Step configuration

InputValue
pathgarden
pathyard
Custom Function OptionscustomMerge
Functionundefined
Target pathresult

Result

{
"doc": {
"garden": {
"flowers": ["roses", "tulips"]
},
"yard": {
"flowers": ["roses", "tulips", "orchids"]
},
"result": {
"flowers": ["roses", "tulips", "roses", "tulips", "orchids"]
}
},
"errors": []
}

Example flow

Sample Deep Merge flow
tags: []
steps:
- stepType: deep-merge
config:
customFunctionOptionKey: customMerge
objectPaths:
- objectPath: garden
- objectPath: yard
targetPath: result
name: Deep Merge
description: ""
condition: ""
sampleData:
garden:
flowers:
- roses
- tulips
yard:
flowers:
- roses
- tulips
- orchids