An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

# Deep Merge



NPM version

NPM downloads per month

Travis branch

Codacy code quality grade
Codacy code coverage

Coverage Status

JavaScript Style Guide

code style: prettier

semantic release

Commitizen friendly

Greenkeeper badge

License

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`.