复制Javascript对象到另一个对象,不创建新的属性

Copy Javascript Object into another Object, not creating new Properties

本文关键字:创建 属性 一个对象 Javascript 对象 复制      更新时间:2023-09-26

假设有两个对象

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

免责声明:这个简单的方法不适用于数组,可枚举的原型属性,null值…

不妨将最外层的循环改为

    for (var prop in target)
        if (prop in source)

取决于两个对象中哪一个要枚举的属性更少

您可以通过target循环,然后从' source '获取值。我建议使用递归函数,因为你的对象可能有多个子对象。

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