Javascript 将对象与对象合并。指定覆盖不合并的内部对象
我有两个对象要合并到一个新对象中,第一个对象是google图表的默认选项:Javascript 将对象与对象合并。指定覆盖不合并的内部对象,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,我有两个对象要合并到一个新对象中,第一个对象是google图表的默认选项: optionsA = { height: 500, focusTarget: 'category', hAxis: { showTextEvery: 0, slantedText: true, slantedTextAngle: 45, format: 'date', }, } 对于第二个对象,我想向hAxis添加一些属性,并用新值覆盖当前
optionsA = {
height: 500,
focusTarget: 'category',
hAxis: {
showTextEvery: 0,
slantedText: true,
slantedTextAngle: 45,
format: 'date',
},
}
对于第二个对象,我想向hAxis
添加一些属性,并用新值覆盖当前选项,但我想在选项a
中保留默认选项
这是我的第二个目标:
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',
},
}
hAxis中的属性完全被新属性覆盖,我的aproach有什么问题吗?因为两个对象中的属性相同 属性被具有相同属性的其他对象覆盖 属性,稍后按参数顺序排列 让我们看看MDN中的示例 我的建议是先合并相同的属性
选项a={
身高:500,
焦点目标:“类别”,
哈克斯:{
showTextEvery:0,
是的,
倾斜角度:45,
格式:“日期”,
},
}
选项B={
isStacked:是的,
哈克斯:{
网格线:{
计数:10
},
格式:“百分比”,
},
}
Object.assign(optionsA.hAxis,optionsB.hAxis);
设newObj=Object.assign({},optionsB,optionsA);
console.log(newObj)代码>如果嵌套不深,可以通过以下两个步骤中断合并过程:
选项a={
身高:500,
焦点目标:“类别”,
哈克斯:{
showTextEvery:0,
是的,
倾斜角度:45,
格式:“日期”,
}
};
选项B={
isStacked:是的,
哈克斯:{
网格线:{
计数:10
},
格式:“百分比”,
}
};
设newNestedMerged=Object.assign({},optionsA.hAxis,optionsB.hAxis);
optionsA.hAxis=新嵌套合并;
optionsB.hAxis=新嵌套合并;
让newObj=Object.assign(optionsA,optionsB);
console.log(newObj)
Object.assign()
仅对源对象的顶级属性进行操作。它不会“下降”到子对象中。参考这个-对象。赋值({},optionsA,optionsB,{hAxis:Object.assign({},optionsA.hAxis,optionsB.hAxis)})
应该做得很好,但对我来说不起作用,这是一个简单的对象示例,实际上有很多属性需要合并。是的,我想这就是你要找的东西。希望有帮助:)谢谢@tai le你救了我一天!酷:)很高兴知道。如果对你有帮助的话。让我们接受它:)抱歉@tai le,但这是您的评论中真正帮助我的答案,。对象。分配仅合并根属性,这对我不起作用