对象深合并
Example
js
const obj = {
a: 1,
b: 2,
c: [3, 4, { a: 1, b: 2 }],
d: {
s: 1,
d: 2,
a: 22,
},
},
obj2 = {
a: 3,
b: 4,
c: [5, 6, 7],
d: {
s: 4,
d: 6,
q: 2,
},
};
const mergeObj = deepMerge(obj, obj2);
Framework
js
import { deepMerge } from 'wgl-utils';
// import deepMerge from 'wgl-utils/es/deepMerge.mjs';
Browser
html
<script type="module">
import { deepMerge } from 'wgl-utils/main.mjs';
// import deepMerge from 'wgl-utils/es/deepMerge.mjs';
const mergeObj = deepMerge(obj,obj2);
</script>
html
<!-- 全量引入 -->
<script src="wgl-utils/main.js"></script>
<script>
const mergeObj = Wgl.deepMerge(obj, obj2);
</script>
Code
js
// src/deepMerge.js
// 对象深合并
export default function deepMerge(obj1, obj2) {
let key;
for (key in obj2) {
// 如果target(也就是obj1[key])存在,且是对象的话再去调用deepMerge,否则就是obj1[key]里面没这个对象,需要与obj2[key]合并
// 如果obj2[key]没有值或者值不是对象,此时直接替换obj1[key]
if (
obj1[key] &&
Array.isArray(obj1[key]) &&
obj2[key] &&
Array.isArray(obj2[key])
) {
obj1[key] = obj1[key].concat(obj2[key]);
} else if (
obj1[key] &&
obj1[key].toString() === '[object Object]' &&
obj2[key] &&
obj2[key].toString() === '[object Object]'
) {
obj1[key] = deepMerge(obj1[key], obj2[key]);
} else {
obj1[key] = obj2[key];
}
}
return obj1;
}
js
// dist/es/deepMerge.mjs
var r={d:function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o:function(r,t){return Object.prototype.hasOwnProperty.call(r,t)}},t={};function e(r,t){let n;for(n in t)r[n]&&Array.isArray(r[n])&&t[n]&&Array.isArray(t[n])?r[n]=r[n].concat(t[n]):r[n]&&"[object Object]"===r[n].toString()&&t[n]&&"[object Object]"===t[n].toString()?r[n]=e(r[n],t[n]):r[n]=t[n];return r}r.d(t,{Z:function(){return e}});var n=t.Z;export{n as default};
//# sourceMappingURL=deepMerge.mjs.map