3.12.1 • Published 7 months ago

putil-merge v3.12.1

Weekly downloads
2,272
License
MIT
Repository
github
Last release
7 months ago

putil-merge

NPM Version NPM Downloads Build Status Test Coverage DevDependencies

A 'swiss army knife' solution for merging two or more objects. It supports deep merge, cloning properties, copying descriptors and filtering.

Installation

$ npm install putil-merge --save

Table of contents

Merge

merge(target, source[, options])

  • target:object:
  • source:object:
  • options:object
    • deep:boolean (optional): If true, it performs deep merge operation. Default: false
    • clone:boolean (optional): If true, clones object properties rather than assigning references. Default: false
    • adjunct:boolean(optional): If true, it copies only non-existing properties. Default: false
    • descriptor:boolean(optional): If true, copies property descriptors. Default: false
    • filter:function (optional): A callback function to test if source property will be merged to target.
    • arrayMerge:boolean|function (optional): If true, it combines array values. It this is a function, result of call will be assigned to target.

Copying source properties to target object

const a = {x: 1, y: 2};
const b = {x: {}, z: [1, 2, 3, 4]};
const merged = merge(a, b);
assert(merged.x===b.x); // References copied
assert(merged.z===b.z); // References copied

Cloning source properties to target object

const a = {x: 1, y: 2};
const b = {x: {}, z: [1, 2, 3, 4]};
const merged = merge(a, b, {clone: true});
assert(merged.x!==b.x); // Object cloned
assert(merged.z!==b.z); // Array cloned

Applying filter while merge

const a = {x: 1, y: 2};
const b = {x: {}, z: [1, 2, 3, 4]};
const merged = merge(a, b, {filter: (src, key)=>key!=='z'});
assert(!merged.z); // Z will not be merged

Copying descriptors

const b = {};
Object.defineProperty(b, 'foo', {
  enumerable: false
});
const merged = merge({}, b, {descriptor: true});
assert.strictEqual(Object.getOwnPropertyDescriptor(merged, 'foo').enumerable, false);

Copying getters and setters

const b = {
  bar: 1,
  get foo(){
    return this.bar; 
  }
};
const merged = merge({}, b, {descriptor: true});
assert.strictEqual(merged.foo, 1);

Copying function properties

const b = {
  bar: 1,
  getFoo(){
    return this.bar; 
  }
};
const merged = merge({}, b, {descriptor: true});
assert.strictEqual(merged.getFoo(), 1);

Merge.all()

Performs merge with more than two objects.

merge.all(arrayOfObjects[, options])

  • arrayOfObjects:Array<object>:
  • options:object
    • deep:boolean (optional): If true, it performs deep merge operation. Default: false
    • clone:boolean (optional): If true, clones object properties rather than assigning references. Default: false
    • combine:boolean(optional): If true, it copies only non-existing properties. Default: false
    • descriptor:boolean(optional): If true, copies property descriptors. Default: false
    • filter:function (optional): A callback function to test if source property will be merged to target.
    • arrayMerge:boolean|function (optional): If true, it combines array values. It this is a function, result of call will be assigned to target.

Node Compatibility

  • node >= 6.0;

License

MIT

3.12.1

7 months ago

3.12.0

7 months ago

3.11.0

7 months ago

3.9.1

1 year ago

3.10.1

1 year ago

3.10.0

1 year ago

3.10.3

1 year ago

3.10.2

1 year ago

3.9.0

2 years ago

3.8.0

2 years ago

3.7.0

3 years ago

3.6.6

3 years ago

3.6.5

3 years ago

3.6.4

3 years ago

3.6.3

3 years ago

3.6.2

4 years ago

3.6.1

4 years ago

3.6.0

4 years ago

3.5.2

4 years ago

3.5.1

4 years ago

3.5.0

5 years ago

3.4.2

5 years ago

3.4.1

5 years ago

3.4.0

5 years ago

3.3.0

5 years ago

3.2.0

5 years ago

3.1.4

5 years ago

3.1.3

5 years ago

3.1.2

5 years ago

3.1.1

5 years ago

3.1.0

5 years ago

3.0.0

5 years ago

2.2.0

5 years ago

2.1.0

5 years ago

2.0.2

6 years ago

2.0.1

6 years ago

2.0.0

6 years ago

1.2.0

6 years ago

1.1.5

7 years ago

1.1.4

7 years ago

1.1.3

7 years ago

1.1.2

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago