2014-07-18 115 views
1

我試圖在Web瀏覽器中從localstorage中檢索JSON對象,然後顯示值。我可以保存JSON對象,並將新數據推送/追加到它。我很難找出檢索和顯示它所需的邏輯。爲了給出一點背景,變量「S」是一個總是變化的數字。時間,是點擊(主要功能)發生的時間。我想把這兩樣東西配對在一起。在Localstorage中顯示JSON對象

EX. I would like to print: 
123456 - Time: 2:04 
54321 - Time : 3:15 

這裏是我現在的儲蓄,並推動/附加:

$("#oico").click(function() { 
var S = window.localStorage.getItem("_snum"); 
var myDate = new Date(); 
var theDate = (myDate.getMonth()+1) + '.' + (myDate.getDate()) + '.' +  myDate.getFullYear(); 
var today = new Date(); 
var h = today.getHours(); 
var m = today.getMinutes(); 
var s = today.getSeconds(); 
var time = h + ":" + m + ":" + s; 
var obj = {}; 
obj[S] = time; 
if (window.localStorage.getItem("_obj") === null) { 
window.localStorage.setItem("_obj", JSON.stringify(obj)); 
} else { 
    var existingEntries = JSON.parse(window.localStorage.getItem("_obj")) || [];; 
    entry[S] = time; 
    window.localStorage.setItem("entry", JSON.stringify(entry)); 
    // Save allEntries back to local storage 
    existingEntries.push(entry); 
    window.localStorage.setItem("_obj", JSON.stringify(existingEntries)); 
} 
}); 

我試圖找出一種方法來打印清單的所有S中的對象「_obj」屬性。但是,由於S不是一個常量值/鍵,我無法弄清楚如何使用它們各自的時間值在列表中打印所有「S」屬性。我知道我的邏輯是如何構建的,可能是有缺陷的,這就是爲什麼我需要幫助。

回答

0

我建議你迭代一個for循環通過你的對象。這樣,你會得到所有的鑰匙,並不需要預先知道他們的名字:

for (key in _obj) { 

    alert("The current snum is: " + key); 
    alert("Stored under the snum is: " + _obj[key]); 

    if (key.match(/[0-9]+/)) { 
     alert("Key is only numeric. It must be an snum."); 
    } 
} 

在Javascript中,你的對象屬性可以是任何數值:

var obj = { 
    1 : 'A', 
    100 : 'B', 
    42 : 'C' 
}; 

for (key in obj) { 
    alert ("Key: " + key + " val: " + obj[key]); 
} 

編輯14/19/07

我認爲你很困惑在哪裏以及爲什麼你有一個對象或原始值。

如果您只希望輸入單個值,如存儲時間,則不需要從該值創建對象和json。所以,如果你在S有一個名字和一個time存儲,那麼就寫:

window.localStorage.setItem(S, time); 

然後,隨着localStorage的是一個對象,你可能只是通過存儲的鍵值對迭代和發現的所有號碼和時間:

for(key in window.localStorage){ 
    val = localStorage.getItem(key); 
    alert("Number: " + key + " time: " + val); 
} 

如果要創建一個對象,並保存它作爲JSON,那麼你應該爲對象選擇唯一的名稱,保存它,後來閱讀和商店再次改變它由唯一的名字。像這樣:

// Read the object to be added a new property 
var myObjectJson = window.localStorage.getItem("MyObjectXY"); 
var myObject = JSON.parse(myObjectJson); 

// Add a new key value pair 
myObject[S] = time; 

// Store the object 
window.localStorage.setItem("MyObjectXY", JSON.stringify(myObject)); 

如果你這樣工作,你想遍歷對象,而不是通過存儲項目。

爲了更清楚地看到,這裏是一個JSFiddle。它只是允許存儲關鍵值對。

爲了避免本地存儲命名空間污染,我推薦第二種方法,存儲一個對象。命名空間污染導致錯誤難以找到。

+0

把這個成一個函數之後: – user3259138

+0

功能displayValues() { 爲(在_srtobj2鍵){ 警報( 「當前SNUM是:」 +鍵); (「存放在snum下是:」+ _srtobj2 [key]); (鑰匙。匹配(/ [0-9] + /){alert(「Key is only numeric。It must be a snum。」); } } } displayValues();我得到的錯誤:未捕獲的SyntaxError:意外的令牌{ – user3259138

+0

我忘記了if語句中的第二個右括號。我編輯了答案。 –