我在localstorage中保存了一些项目,并在存储之前对键值进行字符串化。
localStorage.setItem(this.set_name, JSON.stringify(this.description))
这给了我关键:
item1 Value: [{"description": "some description that was store"}, {"description": "some description that was store"}]
当我使用JSON.parse
获取键值时,它会按预期返回为对象对象,因此,如果不执行JSON.parse
,它将按原样返回整个值。
我想要做的只是返回描述中的内容,"存储的一些描述"而不是整个价值。
我该怎么做?
function loadStorage() {
$itemSection = $("#item-section-set");
var keys = Object.keys(localStorage),
i = 0,
key;
for (; key = keys[i]; i++) {
let itemDesc = localStorage.getItem(key);
console.log(JSON.parse(itemDesc))
}
}
控制台为我提供了'(3) [{…}, {…}, {…}]'
答案 0 :(得分:0)
您应首先解析它,然后从数组中获取它。
考虑var stringy
是您从本地存储中获取的数据,请将其替换为localStorage.getItem(<your key>);
var stringy = "[{\"description\": \"some description that was store 1\"}, {\"description\": \"some description that was store 2\"}]"
var parsedArray = JSON.parse(stringy);
for(var i = 0; i < parsedArray.length; i++){
document.getElementById('area').innerHTML += '<p>'+parsedArray[i].description+'</p>';
}
<div id="area"></div>
答案 1 :(得分:0)
一般情况下,我会创建单独的服务 存储它应该在save上进行stringify,在get上进行JSON.parse 它也应该有内部缓存对象 - 解析对象或未定义,如果对象不在缓存中,应该从localStorage中提取和解析
如果您了解性能,并且由于对象太大或类似而无法使用JSON.parse,我会尝试将描述保存在单独的键值对中 喜欢
localStorage.setItem(this.set_name, JSON.stringify(this.description));
localStorage.setItem(this.set_name+'_'+this.descriptionKey,JSON.stringify(this.description))
有可能仅通过descriptionKey检索描述而无需解析所有对象
答案 2 :(得分:0)
我试图理解你的问题,但我不确定我是否做过,仍然假设你将整个List / Array保存为单个LocalStorageItem中的一个项目,你将在一个项目中有多个描述,因此有多个数组,并且每个数组都有多个对象因此有多个描述,这是我解决这个问题的方法,如果你解释得更多,我会编辑相同的。
function loadStorage() {
$itemSection = $("#item-section-set");
var keys = Object.keys(localStorage),
i = 0,
key;
for (; key = keys[i]; i++) {
let itemDesc = localStorage.getItem(key);
var oneLocalStorageItem = JSON.parse(itemDesc);
oneLocalStorageItem.map(function(oneObjectItem){
console.log(oneObjectItem.description);
})
}
}