我想浏览每个密钥并从每个密钥中获取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
答案 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);
}
}