Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象与对象合并。指定覆盖不合并的内部对象_Javascript_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript 将对象与对象合并。指定覆盖不合并的内部对象

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添加一些属性,并用新值覆盖当前

我有两个对象要合并到一个新对象中,第一个对象是google图表的默认选项:

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,但这是您的评论中真正帮助我的答案,。对象。分配仅合并根属性,这对我不起作用