实现多个对象的深拷贝(合并)

// 判断是否是普通对象
export function isPlainObject(val: any): val is Object {
  return toString.call(val) === '[object Object]'
}

合并逻辑

function deepMerge(...objs: any[]): any {
  const result = Object.create(null)
  objs.forEach(obj => {
    if (obj) {
      Object.keys(obj).forEach(key => {
        const val = obj[key]
        if (isPlainObject(val)) {
          // 这里判断 原对象上 相同键是否是一个 对象
          // 如果是将 新的对象合并到原对象上 (递归)
          if (isPlainObject(result[key])) {
            result[key] = deepMerge(result[key], val)
          } else {
            result[key] = deepMerge(val)
          }
        } else {
          result[key] = val
        }
      })
    }
  })
  return result
}

let newObj = deepMerge(
  { a: 1, b: 2, c: { a: 3, d: 4 } },
    { b: 5, c: { e: 11, f: 22 } }
);
console.log(newObj);

 

posted @ 2020-09-01 17:31  林中有风  阅读(459)  评论(0编辑  收藏  举报