putil-merge v3.13.0
putil-merge
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:objectdeep:boolean(optional): If true, it performs deep merge operation. Default:falseclone:boolean(optional): If true, clones object properties rather than assigning references. Default:falseadjunct:boolean(optional): If true, it copies only non-existing properties. Default:falsedescriptor:boolean(optional): If true, copies property descriptors. Default:falsefilter: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 copiedCloning 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 clonedApplying 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 mergedCopying 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:objectdeep:boolean(optional): If true, it performs deep merge operation. Default:falseclone:boolean(optional): If true, clones object properties rather than assigning references. Default:falsecombine:boolean(optional): If true, it copies only non-existing properties. Default:falsedescriptor:boolean(optional): If true, copies property descriptors. Default:falsefilter: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
1 year ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago