https://github.com/brikcss/merge
Utility to perform a deep merge of a list of objects or arrays.
https://github.com/brikcss/merge
Last synced: about 1 year ago
JSON representation
Utility to perform a deep merge of a list of objects or arrays.
- Host: GitHub
- URL: https://github.com/brikcss/merge
- Owner: brikcss
- Created: 2018-03-26T14:11:21.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2021-02-21T04:34:59.000Z (over 5 years ago)
- Last Synced: 2024-11-01T22:16:52.827Z (over 1 year ago)
- Language: JavaScript
- Size: 4.72 MB
- Stars: 1
- Watchers: 2
- Forks: 3
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Deep Merge
Utility to perform a deep merge of two or more Objects or Arrays.
## Environment support
| Node | CLI | UMD | ES Module | Browser |
| :--: | :-: | :-: | :-------: | :-----: |
| ✔ | x | ✔ | ✔ | ✔ |
## Install
```sh
npm install @brikcss/merge --save-dev
```
## Setup
**Node:**
```js
const merge = require('@brikcss/merge');
```
**JS Modules:**
```js
import merge from '@brikcss/merge';
```
**Browser:**
```js
const merge = window.brikcss.merge;
```
## Usage
Pass list of objects (or arrays) directly to the merge function:
```js
merge(...objects);
```
To use with options, set 1st argument as an Array of objects (or arrays) and set 2nd argument as options Object:
```js
merge([...objects], options);
```
**Note:**
`Merge` works similarly to the `Object.assign()` method in that the first object is set as the merge target and will mutate with each merged object. If you wish to do a full clone, simply pass an empty Object (or Array) as the first object:
```js
merge({}, obj1, obj2);
// Or with options:
merge([{}, obj1, obj2], options);
```
## API
### `Merge(...objects)` or `Merge([...objects], options)`
A container function to merge _either Objects or Arrays_. Any number of Objects or Arrays can be merged, _but they all need to be either Objects or Arrays, not a mix of both._
If only two arguments exist, and the 1st argument is an Array and the 2nd is an Object, `Merge` will merge the items in the Array and treat the Object as options.
### `Merge.objects(target, source, options)`
Returns the target Object, which is now merged with the source Object.
- `target` _{Object}_ Target to merge to.
- `source` _{Object}_ Object to merge with target.
- `options` _{Object}_ [Configuration options](#options).
### `Merge.arrays(target, source, options)`
Returns the target Array, which is now merged with the source Array.
- `target` _{Array}_ Target to merge to.
- `source` _{Array}_ Array to merge with target.
- `options` _{Object}_ [Configuration options](#options).
### Options
**`arrayStrategy`** _{String}_
- `unique` (_default_): Concatenate arrays and remove duplicates.
- `merge`: Same as unique, except nested objects and arrays are merged.
- `concat`: Concatenate arrays, but do not remove duplicates.
- `overwrite`: Overwrite target array with source.
**`ignore`** _{String[]}_
Array of string paths to ignore, or not merge. Use object key names and/or array index values to specify values to ignore. For example: `ignore: ['key', '1', 'a.b.c.d']` will ignore the object key `key`, the 2nd item an array, and the `d` property in the path `a.b.c.d`.