我正在尝试从Web浏览器中的localstorage中检索JSON对象,然后显示值。我能够保存JSON对象,并向其推送/追加新数据。我很难找出检索和显示它所需的逻辑。为了给出一点背景,变量“S”是一个总是在变化的数字。时间,是点击(主要功能)发生的时间。我希望这两个东西配对在一起。
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));
}
});
我试图想出一种方法来打印对象“_obj”中所有S属性的列表。但是,由于S不是常量值/键,我无法弄清楚如何在列表中打印所有“S”属性及其各自的时间值。我知道我如何构建它的逻辑可能存在缺陷,这就是我希望得到帮助的原因。
答案 0 :(得分: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。它只允许存储键值对。
为了避免本地存储命名空间污染,我建议第二种方法,存储一个对象。命名空间污染导致难以发现的错误。