将Javascript对象复制到另一个对象中,而不创建新属性
假设有两个对象将Javascript对象复制到另一个对象中,而不创建新属性,javascript,jquery,Javascript,Jquery,假设有两个对象 source = { name: "A", address: { city: "B", zipcode: "C" }, car: { make: "D", model: "E" } }; target = { name: "", address: { city: "" } }; 现在我想将所有数据从源复制到目标。但是,只有在目标中已存在相应属性的情况下,才能
source = {
name: "A",
address: {
city: "B",
zipcode: "C"
},
car: {
make: "D",
model: "E"
}
};
target = {
name: "",
address: {
city: ""
}
};
现在我想将所有数据从源复制到目标。但是,只有在目标中已存在相应属性的情况下,才能进行复制。它有点像jQuery的扩展,没有添加新属性。根据以上数据,结果将是
target = {
name: "A",
address: {
city: "B"
}
};
如何轻松做到这一点?这应该可以做到:
function extend(target, source) {
for (var prop in source)
if (prop in target) // <== test this
if (typeof target[prop] === "object")
extend(target[prop], source[prop]);
else
target[prop] = source[prop];
}
这取决于两个对象中哪一个的枚举属性较少。应该这样做:
function extend(target, source) {
for (var prop in source)
if (prop in target) // <== test this
if (typeof target[prop] === "object")
extend(target[prop], source[prop]);
else
target[prop] = source[prop];
}
取决于两个对象中哪一个枚举的属性较少。您可以通过
目标
循环,然后从`源`获取值。我建议使用递归函数,因为您的对象可能有多个子对象
function fill_in_values(target, source){
for(var prop in target){
if(typeof target[prop] === 'object'){
fill_in_values(target[prop], source[prop]);
}
else{
target[prop] = source[prop];
}
}
}
您可以循环通过
target
,然后从`源'获取值。我建议使用递归函数,因为您的对象可能有多个子对象
function fill_in_values(target, source){
for(var prop in target){
if(typeof target[prop] === 'object'){
fill_in_values(target[prop], source[prop]);
}
else{
target[prop] = source[prop];
}
}
}
我刚刚写完同样的答案+谢谢你的回答。我刚刚写完同样的答案+谢谢你的回答。