plain-object-merge
Version:
Extremely fast function optimized for deep merging json-serializable plain objects.
35 lines (34 loc) • 985 B
JavaScript
/* IMPORT */
import clone from 'plain-object-clone';
import { isArray, isPrimitive } from './utils.js';
/* MAIN */
const mergeObjects = (target, source) => {
for (const key in source) {
if (!source.hasOwnProperty(key))
continue;
if (key === 'constructor' || key === 'prototype' || key === '__proto__')
continue;
const value = source[key];
if (isPrimitive(value)) {
if (value !== undefined || !(key in target)) {
target[key] = value;
}
}
else if (!target[key] || isArray(value)) {
target[key] = clone(value);
}
else {
target[key] = mergeObjects(target[key], value);
}
}
return target;
};
const merge = (objects) => {
const target = clone(objects[0]);
for (let i = 1, l = objects.length; i < l; i++) {
mergeObjects(target, objects[i]);
}
return target;
};
/* EXPORT */
export default merge;