【发布时间】:2018-01-04 22:42:03
【问题描述】:
我有两个对象。一个是源对象,另一个是源对象的深层副本。每个中都存在相同的键,但深层副本可能具有与源对象不同的值。例如:
{
id: 123,
people: [{
name: "Bob",
age: 50
}, {
name: "Alice",
age: 40
}]
}
and
{
id: 123,
people: [{
name: "Bob",
age: 51 // bob is older now
}, {
name: "Alice",
age: 40
}]
}
请注意,对象更深,键/对象/数组/值更多。
我想将更新后的副本中的 values(和仅值)应用回源对象。
重要的是我需要维护源对象的原始参考点。这意味着我不能执行以下任何操作:
sourceObject = updatedCopiedObject;
因为它会覆盖源对象并中断对源对象的引用
Object.assign(sourceObject, updatedCopiedObject);
因为,正如文档所说:
目标对象中的属性将被 如果它们具有相同的密钥,则来源。稍后来源的属性将 类似地覆盖之前的。
换句话说,它也覆盖了源对象的引用。
我需要做的正是 Object.assign 所做的,但不会覆盖属性 - 只需更改属性匹配的值。
我不知道任何内置方法会以必要的递归/深度方式执行此操作。我可以写一个方法,但我想先看看是否已经有解决这个问题的方法。
【问题讨论】:
-
所以你的问题是,是否有一个内置的方法可以满足你的需求?不,没有。
-
是的 - 谢谢。我想知道的。
-
@torazaburo 您是否考虑过在答案中发表您的评论?