|
|
@@ -76,27 +76,30 @@ export function objectToUint8Array(data: object | string) {
|
|
|
* @param source 源对象
|
|
|
* @returns
|
|
|
*/
|
|
|
-export const deepMerge = <T>(target: T, source: T): T => {
|
|
|
+export function deepMerge<T>(target: T, source: T): T {
|
|
|
for (const key in source) {
|
|
|
- const prototype = Object.prototype.toString.call(target[key]),
|
|
|
- t = target[key],
|
|
|
- s = source[key];
|
|
|
- // 对象属性类型检查
|
|
|
- switch (prototype) {
|
|
|
- case '[object Object]':
|
|
|
- target[key] = deepMerge(t, s);
|
|
|
- break;
|
|
|
- case '[object Array]':
|
|
|
- if (Array.isArray(t) && Array.isArray(s)) {
|
|
|
- target[key] = t.reduce((prev, cur, i) => {
|
|
|
- const value = deepMerge(cur, s[i]);
|
|
|
- prev.push(value);
|
|
|
- return prev;
|
|
|
- }, [])
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- target[key] = s;
|
|
|
+ // 判断属性是否存在
|
|
|
+ if (Object.prototype.hasOwnProperty.call(target, key)) {
|
|
|
+ const t = target[key];
|
|
|
+ const s = source[key];
|
|
|
+
|
|
|
+ // 对象属性类型检查
|
|
|
+ switch (Object.prototype.toString.call(t)) {
|
|
|
+ case '[object Object]':
|
|
|
+ target[key] = deepMerge(t, s);
|
|
|
+ break;
|
|
|
+ case '[object Array]':
|
|
|
+ if (Array.isArray(t) && Array.isArray(s)) {
|
|
|
+ target[key] = t.reduce((prev, cur, i) => {
|
|
|
+ const value = deepMerge(cur, s[i]);
|
|
|
+ prev.push(value);
|
|
|
+ return prev;
|
|
|
+ }, [])
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ target[key] = s;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return target;
|