Mergician
Mergician is a uniquely flexible and light-weight utility for deep (recursive) merging/cloning of JavaScript objects.
Unlike native methods and other merge/clone utilities, Mergician provides advanced options for customizing the merge/clone process. These options make it easy to filter properties, inspect and modify properties before/after merging, merge and sort arrays, and remove duplicate array items. Property accessors and descriptors are also handled properly, ensuring that getter/setter functions are retained and descriptor values are defined on the newly merged object.
Examples
Basic object cloning using default options:
import mergician from 'mergician';
const obj1 = { a: [1, 1], b: { c: 1, d: 1 } };
const clonedObj = mergician({}, obj1);
console.log(clonedObj);
console.log(clonedObj === obj1);
console.log(clonedObj.a === obj1.a);
console.log(clonedObj.b === obj1.b);
Advanced object merging using custom options:
import mergician from 'mergician';
const obj1 = { a: [1, 1], b: { c: 1, d: 1 } };
const obj2 = { a: [2, 2], b: { c: 2 } };
const obj3 = { e: 3 };
const mergedObj = mergician({
skipKeys: ['d'],
appendArrays: true,
dedupArrays: true,
filter({ key, targetObj }) {
if (key === 'e') {
targetObj['hello'] = 'world';
console.log(targetObj);
return false;
}
}
})(obj1, obj2, obj3);
console.log(mergedObj);
Features
- Deep merge/clone JavaScript objects
- Filter properties
- Inspect and modify properties
- Merge arrays
- Sort arrays
- Remove duplicate array items ("dedup")
- Properly handle property accessors (getters/setters) and descriptors
- Returns new object without modifying source objects (immutable)
- Lightweight (1.5k min+gzip) and dependency-free
Platform Support
Node 10+
Chrome 61+
Edge 16+
Firefox 60+
Safari 10.1+
Installation
NPM
npm install mergician
import mergician from 'mergician';
const mergician = require('mergician');
CDN
Available on jsdelivr (below), unpkg, and other CDN services that auto-publish npm packages.
import mergician from 'https://cdn.jsdelivr.net/npm/mergician@1/dist/mergician.min.mjs';
<script src="https://cdn.jsdelivr.net/npm/mergician@1/dist/mergician.min.js">
Usage & Options
See the documentation site for details.
Contact & Support
License
This project is licensed under the MIT license.
Copyright (c) John Hildenbiddle (@jhildenbiddle)