Object.assign和对象扩展运算符都只进行浅复制。
问题示例:
// No object nesting
const x = { a: 1 }
const y = { b: 1 }
const z = { ...x, ...y } // { a: 1, b: 1 }
输出结果与您期望的相同。但是,如果我尝试这样做:
// Object nesting
const x = { a: { a: 1 } }
const y = { a: { b: 1 } }
const z = { ...x, ...y } // { a: { b: 1 } }
与其
{ a: { a: 1, b: 1 } }
你能得到:
{ a: { b: 1 } }
由于展开语法只能深入一层,因此x被完全覆盖。
Object.assign()
也是如此。有没有办法解决这个问题?
const merge = (p, c) => Object.keys(p).forEach(k => !!p[k] && p[k].constructor === Object ? merge(p[k], c[k]) : c[k] = p[k])
- Xaqronhttps://gist.github.com/ahtcx/0cd94e62691f539160b32ecda18af3d6
- Nwawel A Iroume