簡體   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