2016-08-09 19 views
1

我有一個對象,我存儲在本地存儲。我會說謊檢索對象並添加一個鍵/值項目。這是密碼添加鍵/值對失敗,對象分配

var testObject = { 'one': 1, 'two': 2, 'three': 3 }; 

// Put the object into storage 
localStorage.setItem('testObject', JSON.stringify(testObject)); 

// Retrieve the object from storage 
var retrievedObject = localStorage.getItem('testObject'); 

var newdata = JSON.parse(retrievedObject); 
var obj2 = {"four":"4"}; 
Object.assign(newdata, obj2); 

$.each(JSON.parse(retrievedObject), function (index, value) { 
    console.log(index+" "+value); 
}); 

新項目不添加到testObject。我如何將項目添加到現有的對象?

+3

這是一個簡單的錯誤:你是變異newdata,但你從JSON字符串再次啓動,並再次對其進行分析。顯然,新屬性不在該對象中,因爲它不在字符串表示中。如果你已經完成了'$ each(newdata,...)' – trincot

+0

,那麼你會看到新的屬性,我們可以將我們指向你認爲將新項目添加到testObject的行嗎? –

+0

'$ .each(newdata,function(index,value){console.log(index +「」+ value);});''newdata'是包含'obj2'的json obj! –

回答

2

字符串您成功改變newdata但你不使用它。相反,您再次致電JSON.parse(retrievedObject)

var testObject = { 'one': 1, 'two': 2, 'three': 3 }; 
 

 
// Put the object into storage 
 
// Just use a variable because we cant use localstorage on snippet 
 
var storage = JSON.stringify(testObject); 
 

 
// Retrieve the object from storage 
 
var retrievedObject = storage; 
 

 
var newdata = JSON.parse(retrievedObject); 
 
var obj2 = {"four":"4"}; 
 
Object.assign(newdata, obj2); 
 

 
$.each(newdata, function (index, value) { 
 
    console.log(index+" "+value); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1

retirvedObject是一個字符串。您解析字符串,修改生成的對象(newdata被修改)。您不應該期望初始字符串發生更改。

爲了更新本地存儲,只是做:

localStorage.setItem('testObject', JSON.stringify(newdata)); 

需要注意的是手術後retirvedObject仍然會與{ 'one': 1, 'two': 2, 'three': 3 }