|
@@ -0,0 +1,30 @@
|
|
|
+/**
|
|
|
+ * Merges too objects deeply.
|
|
|
+ *
|
|
|
+ * @memberOf object
|
|
|
+ * @function
|
|
|
+ * @param {Object} targetObject
|
|
|
+ * @param {Object[]} objects
|
|
|
+ * @return {Object}
|
|
|
+ */
|
|
|
+const merge = (targetObject, ...objects) => {
|
|
|
+ return objects.reduce((targetObject, object) => {
|
|
|
+ return Object.entries(object).reduce((targetObject, [key, value]) => {
|
|
|
+ if (key in targetObject) {
|
|
|
+ if (Array.isArray(value)) {
|
|
|
+ targetObject[key] = targetObject[key].concat(value);
|
|
|
+ } else if (typeof value === 'object') {
|
|
|
+ merge(targetObject[key], value);
|
|
|
+ } else {
|
|
|
+ targetObject[key] = value;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ targetObject[key] = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ return targetObject;
|
|
|
+ }, targetObject);
|
|
|
+ }, targetObject);
|
|
|
+};
|
|
|
+
|
|
|
+export default merge;
|