z-util-page
Version:
40 lines (39 loc) • 1.03 kB
JavaScript
import { getType } from "../deepClone/index";
/**
* 深度合并n个对象值
* @category 辅助函数
* @example
* ```ts
* const a = { a: 1, b: { c: 2 } };
* const b = { b: { d: 3 } };
* const c = { c: 4 };
* mergeObject(a, b, c);
* ```
* @param origin 将多个对象深度合并到该对象
* @param ob 被合并对象
* @param more 其余被合并对象
*/
export function mergeObject(origin, ob, ...more) {
do {
origin = merge(origin, ob);
ob = more.pop();
} while (ob);
return origin;
}
function merge(origin, ob) {
if (ob === undefined)
return origin;
if (getType(origin) !== 'Object' || getType(ob) !== 'Object')
return origin;
for (const key in ob) {
const oldVal = origin[key];
const newVal = ob[key];
if (oldVal !== newVal && newVal !== undefined) {
if (getType(oldVal) !== 'Object')
origin[key] = newVal;
else
merge(oldVal, newVal);
}
}
return origin;
}