深度合并两个javascript对象lodash/香草
我正在尝试合并两个包含对象的对象..其中包含一个对象数组..你明白了。但是,我的代码没有产生期望的结果,我不明白为什么…可能是因为我刚刚开始使用lodash,我遗漏了一些明显的东西 这里有两个我想合并的对象深度合并两个javascript对象lodash/香草,javascript,lodash,Javascript,Lodash,我正在尝试合并两个包含对象的对象..其中包含一个对象数组..你明白了。但是,我的代码没有产生期望的结果,我不明白为什么…可能是因为我刚刚开始使用lodash,我遗漏了一些明显的东西 这里有两个我想合并的对象 var original = { a: "bbbb", Id: 1, b: { a: "bbb", Id: 2 }, c: "aaa", d: [ { a
var original = {
a: "bbbb",
Id: 1,
b: {
a: "bbb",
Id: 2
},
c: "aaa",
d: [
{
a: "bbbb",
Id: 1,
b: {
a: "bbb",
Id: 2
},
c: "aaa"
},
{
a: "bbbb",
Id: 2,
b: {
a: "bbb",
Id: 3
},
c: "aaa"
}
]
};
var source = {
a: "aaa",
Id: 1,
b: {
a: "aaa",
Id: 2
},
c: null,
d: [
{
a: "aaa",
Id: 1,
b: {
a: "aaa",
Id: 2
},
c: null
},
{
a: "aaa",
Id: 2,
b: {
a: "aaa",
Id: 3
},
c: null
}
]
};
结果对象应仅包含aaa作为值,而不包含null。从源获取值,除非它为null并且不复制数组,而是合并数组中的对象。。我的代码很好地合并了对象……但是,当它到达对象数组时,它无法生成正确的结果
结果应该是:
{"a":"aaa",
"Id":1,
"b":
{
"a":"aaa",
"Id":2
},
"c":"aaa",
"d":
[
{
"a":"aaa",
"Id":1,
"b":
{
"a":"aaa",
"Id":2
},
"c":"aaa"
},
{
a:aaa,
Id:2,
b:
{
a:aaa,
身份证号码:3
},
c:aaa
}
]}
这是我的密码:
谢谢大家! 您可以迭代对象的键,并仅在目标值为空时更新 函数更新源,目标{ Object.keysource.foreachk函数{ 如果目标[k]==null{ 目标[k]=源[k]; 回来 } 如果源[k]&&typeof源[k]=='object'{ 更新源[k],目标[k]; } }; } var source={a:bbbb,Id:1,b:{a:bbb,Id:2},c:aaa,d:[{a:bbbbb,Id:1,b:{a:bbb,Id:2},c:aaa},{a:bbb,Id:2,b:{a:bbb,Id:3},c:aaa}, target={a:aaa,Id:1,b:{a:aaa,Id:2},c:null,d:[{a:aaa,Id:1,b:{a:aaa,Id:2},c:null},{a:aaa,Id:2,b:{a:aaa,Id:3},c:null}; 更新资源、目标; console.logtarget;
.作为控制台包装{max height:100%!important;top:0;}我将您的代码编辑为可读。您能否以相同的格式添加所需的结果?仍然不确定我的小提琴是否符合你的要求。根据你所说的,我认为这是你想要的结果:我意识到我忘记在第一次发送小提琴之前保存它。请告诉我这对您是否正确,因为它更喜欢使用源值覆盖任何属性。如果需要,可以跳过对空值的覆盖,因为它们没有用处。这样做:是的,你必须在每个子对象上运行相同的函数。这有点递归,但我会告诉你。