使用对象分配添加键/值对失败

时间:2016-08-09 20:04:39

标签: javascript jquery

我有一个存储在本地存储中的对象。我想检索对象并向其添加一个键/值项。这是代码

 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。如何将项目添加到现有对象?。

2 个答案:

答案 0 :(得分: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 :(得分:1)

retrievedObject是一个字符串。您解析字符串,修改生成的对象(newdata被修改)。您不应期望更改初始字符串。

要更新localStorage,请执行以下操作:

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

请注意,在该操作之后retrievedObject仍然是{ 'one': 1, 'two': 2, 'three': 3 }

的字符串