我有一个存储在本地存储中的对象。我想检索对象并向其添加一个键/值项。这是代码
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
。如何将项目添加到现有对象?。
答案 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 }