var obj = {
customerInfo: {
fname: "Tom",
lname: "Smith",
age: 23,
height: 160
},
car: {
color: "red",
numWheels: 4
}
};
我想将此对象修改为:
var obj = {
customerInfo: {
fname: "Sally",
lname: "Adams",
mname: "Tully",
age: 23,
height: 160
},
car: {
color: "red",
numWheels: 4
}
};
然而,如果我这样做
_.extend(obj, {
customerInfo: {
fname: "Sally",
lname: "Adams",
mname: "Tully"
}
});
对象变为
{
customerInfo: {
fname: "Sally",
lname: "Adams",
mname: "Tully"
},
car: {
color: "red",
numWheels: 4
}
};
并且年龄和身高已被消灭。
我需要做些什么才能保留嵌套的数据?
那么更新更复杂的对象呢?
答案 0 :(得分:1)
直接扩展customerInfo
。下划线.extend()
替换您提到的任何键,在这种情况下,删除任何以前不在新对象中的嵌套键。
_.extend(obj.customerInfo, {
fname: "Sally",
lname: "Adams",
mname: "Tully"
});
答案 1 :(得分:1)
有更好的方法来实现您实际上正在寻找的深度合并行为......
您可以使用Jquery的$ .extend API,如下所示:http://api.jquery.com/jquery.extend/
我已经将这个小例子放在一起以匹配您的代码示例,因为我相信这种通用的合并方法是您实际需要的,对吗?
uri
http://jsfiddle.net/hrqbyd5c/9/
但要注意JQuery文档
在深度扩展中,对象和数组是扩展的,但对于原始类型(如String,Boolean和Number)的对象包装不是。深度扩展循环数据结构将导致错误。
对于不属于此行为的需求,请编写自定义扩展方法,或使用类似lodash的库。
查看lodash的合并API文档https://lodash.com/docs#merge
希望这有助于更多......