我有两个对象,想要将它们合并成一个新对象。第一个对象是谷歌图表的默认选项:
optionsA = {
height: 500,
focusTarget: 'category',
hAxis: {
showTextEvery: 0,
slantedText: true,
slantedTextAngle: 45,
format: 'date',
},
}
我的第二个目标是向hAxis
添加一些属性,并使用新值覆盖现有选项,但我希望保留默认选项中的 optionsA
选项。
这是我的第二个对象:
optionsA = {
isStacked: true,
hAxis: {
gridlines: {
count: 10
},
format: 'percent',
},
}
这些对象比较复杂,但我简化了属性以简化问题
当我尝试使用object.assign合并时,结果是B对象将新的根属性添加到新对象中,但在hAxis
中的属性被optionsB
中的选项完全覆盖。
let newObj = Object.assign({}, optionsA, optionsB);
这是我期望的对象:
{
height: 500,
focusTarget: 'category',
isStacked: true,
hAxis: {
gridlines: {
count: 10
},
format: 'percent',
showTextEvery: 0,
slantedText: true,
slantedTextAngle: 45,
},
}
但是我得到的不是这个,而是这个:
{
height: 500,
focusTarget: 'category',
isStacked: true,
hAxis: {
gridlines: {
count: 10
},
format: 'percent',
},
}
中的属性会被新属性完全覆盖,我的做法有什么问题吗?
Object.assign()
只操作源对象的顶层属性。它不会“深入”到子对象中。 - undefinedObject.assign({}, optionsA, optionsB, {hAxis: Object.assign({}, optionsA.hAxis, optionsB.hAxis)})
应该可以完成任务。 - undefined