LocalStorage:从每个键获取每个值

时间:2017-09-21 09:17:13

标签: html angular loops typescript local-storage

我想浏览每个密钥并从每个密钥中获取name值。 这就是我的LocalStorage的样子。

  

键:3值:   {“name”:“Kevin”,“country”:“Canada”,“about”:“Test”,“image”:“”}

     

键:4值:   { “名称”: “荷马”, “国”: “加拿大”, “大约”: “测试”, “图像”: “”}

我想获取这些名称并将它们添加到我的数组中。我尝试用这种方法:

for(var key in localStorage){
   let user = JSON.parse(localStorage.getItem(key));
   this.users.push(user);
}

我得到的错误是:

  

SyntaxError:位置1的JSON中的意外标记e

7 个答案:

答案 0 :(得分:1)

 var keys = Object.keys(localStorage);
 keys.forEach(key=>{
  var json_str =localStorage.getItem(key)
   try {
       var abc = JSON.parse(json_str);
       this.user = abc;
    } catch (e) {
    console.log(e)
   }
})

答案 1 :(得分:0)

当你说我想得到这些名字时,我不明白,但无论哪种方式,你都可以尝试这样的方式:

var keys = Object.keys(localStorage);
for(var i=0;i<keys.length;i++){
    var key = keys[i];
    console.log(key, localStorage[key]);
    //store here "both names" where you want them
    //you can also access each element with localStorage[key].name, localStorage[key].country, etc.
}

答案 2 :(得分:0)

这是Robert's answer的改进。

只需枚举localStorage中具有name属性字符串的所有值(密钥本身无关紧要)。然后返回该数组。

根据您自己的回答,您可能会有不一致的可变状态,因为将临时变量移动到实例范围不会影响您的情况。

function getUsers() {
  return Object.values(localStorage)
    .map(json => {
      try {
        return JSON.parse(json);
      }
      catch (e) {
        return undefined;
      }
    })
    .filter((user?: any): user is {name: string} => user && typeof user.name === 'string');
}

const users = getUsers();

答案 3 :(得分:0)

您可以考虑使用我的库ngx-store来处理localStorage,sessionStorage,cookies以及Angular中的更多内容。要实现您想要的功能,您将能够将整个数组存储在存储中,或者只使用下面的代码和当前的数据结构:

Preview

真的,它可以就这么简单;)

答案 4 :(得分:0)

您可以使用方法hasOwnProperty('propertyName')检查对象中是否有名称。然后执行所需的操作。

let localStorage = {
    "key1": {"name":"Kevin","country":"Canada","about":"Test","image":""},
    "key2": {"name":"Homer","country":"Canada","about":"Test","image":""}
}
for(let key of Object.keys(localStorage)){
    if(localStorage[key].hasOwnProperty('name')){
        console.log(localStorage[key]['name']);
    }
}

答案 5 :(得分:-1)

    const  allItems = []
    const keys = Object.keys(window.localStorage);  // all keys

    keys.forEach(key=> {
      const item = JSON.parse(localStorage.getItem(key) + '');  //item with type Object
      allItems.push(item);
    });
    console.log(allItems) // arry of object

答案 6 :(得分:-2)

我设法解决它,总是在循环中初始化一个新的let user是一个简单的错误。

我移出user,其余代码也可以使用。

user: any;

  getUsers():void{
    for(var key in localStorage){
      this.user = JSON.parse(localStorage.getItem(key));
      this.users.push(this.user);
    }
  }