2015-10-26 44 views
0

我有一個類似於下面示例對象的對象。將多次添加到數組時,防止引用同一個對象

var obj = { 
id : "", 
entries: [ 
    { 
    url : "some url", 
    response : {a response object} 
    }, 
    { 
    url : "another url", 
    response : {a response object} 
    } 
] 
}; 

在上述對象中,我有一個entries元素,它是一個對象數組。 entries元素中的每個對象都有一個'url'屬性和一個'response'屬性,它是一個對象。

在對象中可能缺少條目中的響應屬性。在這種情況下,我在一個變量'tempObj'中有一個默認的響應對象,我將這個tempObj賦值給'entries'元素。

var tempObj = { 
status : 200 
statusText : "Success" 
}; 

obj.entries[1]["response"] = tempObj; 

問題是,當存在丟失在obj它正確地增加了一個響應元件,用於第一缺失entries多個響應元件,但對於第二entries它到所述第一元件加入增加了一個參考。

我需要在第二個元素中添加確切的值。我怎樣才能做到這一點?

這是在nodejs應用程序(而不是客戶端JavaScript)。

+0

這是一個JavaScript對象。它與JSON無關。 –

+1

*「我需要在第二個元素中添加確切的值,我該怎麼做?」*每次添加新對象時創建一個新對象。 –

+0

感謝您更新問題。 – nzhmz

回答

0

只需循環訪問entries數組,然後在必要時進行更新。例如:

var tempObj = { 
    status : 200, 
    statusText : "Success" 
}; 

obj.entries.forEach(function(item){ 
    item.response = item.response || tempObj; 
}); 

如果您需要默認響應是唯一的每個項目,那麼就用你喜歡的克隆方法,並將其應用在分配線。例如,在這裏看到:What is the most efficient way to deep clone an object in JavaScript?


更新:當我需要爲此事是共同但有擴展定期JS做克隆,或任何東西,我通常會向lodash。您可以輕鬆地使用此庫,並且它可以在node.js和前端客戶端上運行。克隆你會做這樣的事情:

item.response = item.response || _.assign({}, tempObj); 
+0

這是一個nodejs代碼,你建議使用的大多數克隆方法都使用jQuery。 – nzhmz

+0

No Hamza,它是不是jQuery。['forEach'是ECMAScript 5.1](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Specifications)。但是這個答案中實際上缺少的是什麼是克隆。 :) –

+0

[這是一個很好的純JavaScript的克隆()實現](http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-an-object/122190# 122190)我想。 –

相關問題