繁体   English   中英

用一个对象的属性替换一个对象的属性?

[英]Replace one object's properties with the properties of another?

首先,我不是说将一个对象深深地克隆到另一个对象。

我有一个对象:

var data1 = {
               p1: values1,
               p2: values2,
               .....
            };

value1和value2可以是任何数据类型,如对象或数组。

我有另一个对象:

var data2 = {
               p3: values3,
               p4: values4,
               .....
            };

value3和value4可以是任何数据类型,如对象或数组。

现在我想将所有data2的属性克隆到data1。

我想要这个的原因是data1被引用,在data1的属性改变后我不想破坏引用。

如果我做的事情

 data1 = clone(data2)

我会打破参考。

更新:打破引用意味着什么:

var data1 = {
             p1: value1
          }; 
var data2 = {
              p2: vale2
          };
var ref = data1;

如果我做:

data1 = clone(data2);  

现在ref仍然指向旧的data1,它的值仍然是:

{
   p1: value1
}

但我希望ref是data2

你可以使用这个功能:

function replaceProperties(dest, src)  {
    for (var i in dest) 
        delete dest[i];
    for (var i in src) 
        dest[i] = src[i];
}

代码很明显,看起来像你想做的。 它并没有像你说的那样“打破参考”。

虽然当属性不可枚举或原型时它可能不会做你想要的......

如果您不必支持IE10,之前使用__proto__setPrototypeof ,则可以在更改src属性时进行dest更新:

function replaceProperties(dest, src)  {
    for (var i in dest) 
        delete dest[i];
    Object.setPrototypeOf(dest, src);
}

尝试:

Object.extend(data1,data2);

使用jQuery.extend()

对于深层副本: var object = $.extend({}, object1, object2);

更多信息http://api.jquery.com/jQuery.extend/#jQuery-extend-target-object1-objectN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM