【问题标题】:"for" iterates only once when i want to read from local storage当我想从本地存储读取时,“for”只迭代一次
【发布时间】:2019-06-22 19:17:03
【问题描述】:

我想通过单击按钮从本地存储中读取所有内容并将其显示在我的数组中,但“for”循环仅迭代一次

向本地存储发送内容:

onClick1() {
    var value = document.getElementById('textfield').value; 
    localStorage.setItem("todoData" + Date.now(),value);  

取回:

onClick4(){
  for (var j = 0; j < localStorage.length; j++){
    this.todos = [localStorage.getItem(localStorage.key(j))];
    }

预期结果:
我想查看本地存储中的所有内容

实际结果:
我只得到一个元素

【问题讨论】:

  • for (const key in localStorage){ this.todos.push(localStorage.getItem(key))}
  • “我只得到一个元素” - 因为你在循环的每一轮都覆盖了 this.todos 中的任何内容
  • 谢谢@Andreas!!!你给我指路了!

标签: javascript angular local-storage


【解决方案1】:

这应该可以解决它:

替换这一行:

localStorage.setItem("todoData" + Date.now(),value);

用这一行:

localStorage.setItem("todoData" + Date.now(), JSON.stringify(value));

还有整个功能:

onClick4() {
  for (var j = 0; j < localStorage.length; j++) {
     this.todos = [localStorage.getItem(localStorage.key(j))];
  }
}

使用此功能:

onClick4() {
 let tempArray = [];
 for (var i = 0; i < localStorage.length; i++) {
     tempArray.push(JSON.parse(localStorage.getItem(localStorage.key(i))));
 }
 this.todos = tempArray;
}

【讨论】:

  • 为什么要在字符串上调用JSON.stringify()? o.O
  • @Andreas 这始终是一个好习惯。安全总比后悔好。示例:将“0”存储到 localStorage 中使其成为字符串,并在任何地方进行严格比较 (===)(使用严格比较也被认为是一种很好的做法,并且 webpack 和 CRA 也强烈推荐)可能会产生不希望的结果。 Stringify 和 parse 让我们程序员的生活更轻松。
  • 是的,但是... 在字符串上调用 JSON.stringify() 是不必要的 - 并且 .value 将始终返回一个字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2020-12-28
相关资源
最近更新 更多