Javascript 如何动态合并两个不同深度的对象
我身上有两件完全相同的东西Javascript 如何动态合并两个不同深度的对象,javascript,typescript,object,Javascript,Typescript,Object,我身上有两件完全相同的东西 let a = { title : "developer”, startDate:{ month :’jan’} } let b = { title :{ value: "" } , startDate :{month:{value:””}} } 我需要动态合并这两个对象,以获得如下所示的对象 let c = { title :{ value: "developer"
let a = {
title : "developer”,
startDate:{ month :’jan’}
}
let b = {
title :{
value: ""
} ,
startDate :{month:{value:””}}
}
我需要动态合并这两个对象,以获得如下所示的对象
let c = {
title :{
value: "developer"
} ,
startDate:{
month:{ value:” jan”}}
}
您可能需要首先使两个对象具有相同的结构,然后运行深度合并。我能帮你吗
const newA = Object.entries(a).reduce((newObject, [key, value]) => ({
...newObject,
[key]: { value },
}, {}))
// newA looks now like
//
// {
// title: {
// value: "developer
// }
// }
let c = _.merge(a, b); // lodash merge for deep merge. Otherwise write your own
以下是解决您的问题的解决方法:
let a = {
title : "developer",
startDate:{ month :'jan'}
}
let b = {
title :{
value: ''
} ,
startDate :{month:{value:''}}
}
var c = {};
c.startDate = {};
c.title = {};
c.startDate.month = {};
c.startDate.month.value = a.startDate.month;
c.title.value = a.title;
console.log("Merged object",c);
您只需实现一个函数就可以实现这一点。举个例子:
let a = {
title: "developer",
startDate: { month: "jan" }
};
let b = {
title: {
value: ""
},
startDate: { month: { value: "" }}
};
您可以使用此选项获取值:
const mergeObject = (a, b) => {
b.title.value = a.title;
b.startDate.month.value = a.startDate.month;
return b;
};
如果您现在调用,请说let c=mergeObject(a,b)
c将
let c = {
title: {
value: "developer"
},
startDate: {
month: { value: "jan" }}
}
当然,可以修改此函数以反映您的确切需要。您不需要对象
b
,因为它只是对象a
的副本,具有额外的“值”属性。您可以遍历完整的
a
对象,然后深入复制b
对象中的值
我为此编写了一个递归方法,您可以遍历到对象的最后一级,并将值复制到另一个对象中
函数mergeObj(sourceObj,newObj){
key(sourceObj).forEach(key=>{
if(sourceObj[key]&&typeof sourceObj[key]=“object”){
newObj[key]={};
mergeObj(sourceObj[key],newObj[key]);
}否则{
//更新属性
newObj[key]={};
newObj[key]['value']=sourceObj[key];
}
});
}
设a={
标题:“开发商”,
起始日期:{月份:'jan'}
};
设b={};
mergeObj(a,b);
控制台日志(b)代码>我不想成为“那个家伙”,但我认为您可能需要先让两个对象具有相同的结构,然后再尝试运行深度合并。这些对象是不相同的。你能提供一些其他的规则或解释你的想法吗?我将简化考虑下面的对象,让A= {标题:“开发者”,开始日期:{月:“简”}需要遍历到最后一个属性,并将最后一个值赋值给新的属性“值”。{value:“jan”}}}自定义代码有帮助吗?我不能使用第三方库