Skip to content
目录

对象深合并

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