将数据附加到 localStorage 对象

新手上路,请多包涵

我正在尝试向当前的 localStorage 对象添加一个新对象,但没有成功。最后,我没有在 localStorage 中拥有两组数据,而是得到了最后一组。对我做错了什么有任何见解吗?谢谢

这是我正在尝试做的事情:

 // add the first student
var newStudent = [{
     "name":        "John",
     "age":         21,
     "nationality": "Spanish"
 }];

localStorage.setItem("students", JSON.stringify(newStudent));

// Retrieve the object from storage to add a new student
var retrievedObject = localStorage.getItem("students");
var stored          = JSON.parse(retrievedObject);

// add a new student
var newStudent2 = [{
    "name":        "Mary",
    "age":         20,
    "nationality": "German"
}];
var stored = Object.assign(stored, newStudent2);

// Update the storage
localStorage.setItem("students", JSON.stringify(stored));
var result = localStorage.getItem("students");

console.log(result);

原文由 McRui 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 456
2 个回答

您应该存储数组,而不是对象;

 var students = [];

var student1 = { s: 1 };

students.push(student1);

localStorage.setItem("students", JSON.stringify(students));

var stored = JSON.parse(localStorage.getItem("students"));

var student2 = { s: 2 };

stored.push(student2);

localStorage.setItem("students", JSON.stringify(stored));

var result = JSON.parse(localStorage.getItem("students"));

console.log(result);

原文由 Sergey Yarotskiy 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 localStorage 取回时,您正在用 newStudent2 替换存储的对象:

 var newStudent = [{
     "name":        "John",
     "age":         21,
     "nationality": "Spanish"
 }];

localStorage.setItem("students", JSON.stringify(newStudent));

var retrievedObject = localStorage.getItem("students");
var stored          = JSON.parse(retrievedObject); <----newStudent1

var newStudent2 = [{
    "name":        "Mary",
    "age":         20,
    "nationality": "German"
}];

var stored = Object.assign(stored, newStudent2); <----Here newStudent1 is replaced by newStudent2

localStorage.setItem("students", JSON.stringify(stored)); // Here newStudent2 is replacing old object on localStorage
var result = localStorage.getItem("students");

console.log(result);

您可以改为尝试创建一个对象数组,并在创建新对象时附加它们。

 var objects = []
objects.push(stored)

localStorage.setItem('students', JSON.stringify(objects))

原文由 Diego Gallegos 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题