2014-07-18 73 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语句中的第二个右括号。我编辑了答案。 –