xxm-test-js
Version:
xxm-js通用js工具(utils)库
50 lines • 1.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deepMerge = deepMerge;
/**
* 递归合并两个或多个对象
* Copyright (c) 2024 xxm
*
* @template T - 目标对象类型
* @template U - 源对象类型
* @param {T} target - 目标对象
* @param {U} source - 源对象
* @returns {T & U} 返回合并后的新对象
* @example
*
* ```ts
* const obj1 = { a: 1, b: { c: 2 } };
* const obj2 = { b: { d: 3 }, e: 4 };
*
* const result = deepMerge(obj1, obj2);
* // 结果: { a: 1, b: { c: 2, d: 3 }, e: 4 }
* ```
*/
function deepMerge(target, source) {
const output = Object.assign({}, target);
if (isObject(target) && isObject(source)) {
Object.keys(source).forEach((key) => {
if (isObject(source[key])) {
if (!(key in target)) {
Object.assign(output, { [key]: source[key] });
}
else {
output[key] = deepMerge(target[key], source[key]);
}
}
else {
Object.assign(output, { [key]: source[key] });
}
});
}
return output;
}
/**
* 判断一个值是否为对象
* @param {any} item - 要检查的值
* @returns {boolean} 如果是对象则返回 true,否则返回 false
*/
function isObject(item) {
return item && typeof item === 'object' && !Array.isArray(item);
}
//# sourceMappingURL=merge.js.map