【发布时间】:2018-09-18 11:44:53
【问题描述】:
我了解到,当使用 Object.assign() 时,它只扩展顶级对象。如何深入扩展对象?例如,假设我有以下源对象:
const source = {
id: 1,
otherKey: {},
params: {
page: {
a: 1,
b: {}
},
data: {
b: 1
}
}
}
我正在像这样使用Object.assign():
Object.assign({}, source, {
params: {
page: {
a: 2
}
}
}
结果将是:
{
id: 1,
otherKey: {},
params: {
page: {
a: 2
}
}
}
如何以浅克隆方式保留 params.data 键和 params.page.b 键。
oldObject.params.data === newObject.params.data // true
oldObject.params.page === newObject.params.page // false
oldObject.params.page.b === newObject.params.page.b // true
注意:这个问题与How to deep merge instead of shallow merge不同。那里的答案没有给出预期的结果。
检查这个bin,它从上面的链接中得到答案。
【问题讨论】:
-
"注意:这个问题与How to deep merge而不是shallow merge不同。那里的答案没有给出预期的结果。" 它看起来完全像一个复制。具体是什么(例如)this answer 没有按您的预期工作?示例:jsfiddle.net/9oczv2a0
-
@T.J.Crowder 给我几分钟时间给你看。
-
您能否指出
oldObject.params === newObject.params和oldObject === newObject的预期结果? -
oldObject.params === newObject.params // 假 oldObject === newObject // 假
-
所以你想要在源和目标之间使用相同的、预先存在的
params对象的东西。这可能不是一个好主意,但如果这是您想要做的,那么修改那里的代码肯定很简单吗?你被困在哪里了?
标签: javascript javascript-objects shallow-copy shallow-clone