javascript - JS:存储在本地存储中的数组中的多个对象
问题描述
我整天都在尝试这样做,但无法做到正确。我在各种网站上阅读了许多文章并尝试了许多不同的方法,但我仍然遇到这样或那样的问题。
抱歉,如果这有点随意,我正在努力解决我的问题,所以我正在努力寻找寻求帮助的领域。
组件目标:存储在 LS 上的数组保存对象,保存有关显示 的信息组件问题:根据代码,我似乎要么覆盖单个对象,不能记录超过 2 个对象(然后相互覆盖)或存储 1对象很好,数组开始弄乱更多条目。
TLDR:
我现在要做的就是:
- 将新对象推送到新的 showList 数组
- 从 LS 中的 showList 数组中拉出我的对象(如果存在),推入新的 showList
-stringify,然后将我的新组合数组推入 LS
下面是相对函数。
function addNewShow(titleArg, typeArg, genreArg, watchedArg) {
var showList = [];
var show = {
title: titleArg,
type: typeArg,
genre: genreArg,
watched: watchedArg
};
showList.push(show);
showList.push(JSON.parse(localStorage.getItem('showList')));
console.log(showList);
localStorage.setItem("showList", JSON.stringify(showList));
};
如果您希望看到该项目,您可以在这里看到:https ://codepen.io/11PH/pen/NONJBa?editors=1011
非常感谢您的任何帮助,在此先感谢您。
解决方案
您将从本地存储接收到的整个数组推送到本地showList数组的第二个位置,您应该使用数组连接:
localStorage.removeItem('showList');
function addNewShow(titleArg, typeArg, genreArg, watchedArg) {
var showList = [];
var show = {
title: titleArg,
type: typeArg,
genre: genreArg,
watched: watchedArg
};
showList.push(show);
showList = showList.concat(JSON.parse(localStorage.getItem('showList')||'[]'));
console.log(showList);
localStorage.setItem("showList", JSON.stringify(showList));
};
addNewShow(1,2,3,4);
addNewShow(1,2,3,5);
addNewShow(1,2,3,6);
addNewShow(1,2,3,7);
小片段显示了为什么(jsonString||"[]")很重要:
var array = [1,2,3,4];
console.log("array is:");
console.log("\t", array );
console.log("concating null adds new null element to the array");
console.log("\t", array.concat(null) );
console.log("concating empty array deosn't change anything");
console.log("\t", array.concat([]) );
console.log("result of expresion (null||[]) is empty array not null");
console.log("\t", null||[]);
console.log("puting it all together, if we don't want to add null to the array then we can write array.concat( null||[] )");
console.log("\t", array.concat( null||[] ) );
console.log('additionaly JSON.parse(null) in null');
console.log("\t", JSON.parse(null) );
Array.concat 就是这样工作的——MDN 是很好的文档和示例来源——这里是concat。
推荐阅读
- bash - 这个命令在 VSCode 的 CLI 启动脚本中做了什么?
- pynput - Pynput 鼠标点击
- mysql - Spring Boot,Java,Docker Compose,尝试在两个容器(mysql,my-api)之间建立连接时出现“连接被拒绝”
- javascript - 从 AJAX 脚本中的不同页面获取 IDText
- amazon-web-services - Elastic Beanstalk Amazon linux 2 与 docker | nginx自定义配置
- javascript - 响应式文本问题
- nginx - nginx缓存静态文件,接受的答案对我不起作用
- css - 媒体查询方向移动响应纵向到横向
- r - 密码授予使用 R OAuth2 中的 HTTR 包生成令牌
- c++ - C++递归函数崩溃