2016-09-28 104 views
0

我想让一个函数允许我使用JSON.stringify保存变量,我的代码可以将数据保存在localStorage中,但是,我不知道如何检索它。如何从localStorage中检索JSON数据

这里是我的代码:

<body> 
<button id="btn"> SAVE </button> 

<script> 
if(btn){ 
    btn.addEventListener("click", function(){saveSession();}) 
} 
function saveSession(){ 
var session = {'myValues': [],'state': true}; 
session.myValues.push({ 'value 1': '50'}); 
session.myValues.push({ 'value 2': '100'}); 
session.myValues.push({ 'value 3': '150'}); 
alert("saved"); 
localStorage.setItem('session', JSON.stringify(session)); 
var restoredSession = JSON.parse(localStorage.getItem('session')); 
} 
</script> 
</body> 

这段代码保存在localStorage的数据,但是,我现在想的就是保存的数据value 1并分配其价值,这将是50对一些变量,让说我有var myValuevalue 1它等于50,所以,myValue将是50.我怎么能做到这一点?提前感谢。

回答

3

function getValue(key) { 
 
    // Get the session object and parse it 
 
    var session = JSON.parse(localStorage.getItem('session')); 
 
    // Seperate out myValues 
 
    var myValues = session.myValues; 
 
    // Filter out values that don't have a key equal to the key provided 
 
    var filteredValue = myValues.filter(item => item.hasOwnProperty(key)); 
 
    // Based on the example you provided there should only be one item with that key so return the first item in the filtered array 
 
    return filteredValue[0]; 
 
} 
 

 
var myValue = getValue('value 1');

所以上面应该给你你正在寻找的结果。这表示由于数据结构的原因,这是不必要的困难。 myValues只是键值对吗?如果是这样,为什么不说只是说

session.myValues['value 1'] = '50'; 
session.myValues['value 2'] = '100'; 
session.myValues['value 3'] = '150'; 

此外,使用具有空格作为关键字的字符串是不好的做法。它要求你通过括号表示来访问。另一种方法是

session.myValues.value1 = '50'; 
session.myValues.value2 = '100'; 
session.myValues.value3 = '150'; 

最后,如果你做了getValue函数上面变得简单了很多...

function getValue(key) { 
 
    var session = JSON.parse(localStorage.getItem('session')); 
 
    return session.myValues[key]; 
 
} 
 

 
var myValue = getValue('value 1');

你可能会问 - 那么你仍然用括号表示...?每当密钥被动态访问时,这是一项要求。所以上面的命名选项仍然有效......但它通常不会受到鼓励。

+0

这个回答你的问题? – aray12

+0

对不起,我没有回复早些时候我没有互联网,是的这回答了我的问题,我非常感谢,谢谢。 –

+0

很高兴我能帮到你。你介意标记答案是否正确。我们喜欢这里的假互联网点:) – aray12