首页 > 解决方案 > 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

非常感谢您的任何帮助,在此先感谢您。

标签: javascriptjsonlocal-storage

解决方案


您将从本地存储接收到的整个数组推送到本地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


推荐阅读