Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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_Jquery - Fatal编程技术网

将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];
        }
    }
}

我刚刚写完同样的答案+谢谢你的回答。我刚刚写完同样的答案+谢谢你的回答。