2016-09-28 103 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