2016-08-09 22 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 }