2014-07-18 5 views
1

웹 브라우저에서 localstorage에서 JSON 객체를 검색하고 값을 표시하려고합니다. JSON 개체를 저장하고 새 데이터를 추가/밀어 넣을 수 있습니다. 나는 그것을 검색하고 표시하는 데 필요한 논리를 파악하는 데 어려움을 겪고 있습니다. 작은 배경을 제공하기 위해 변수 "S"는 항상 변경되는 숫자입니다. 시간은 클릭 (주요 기능)이 발생한 시간입니다. 나는이 두 가지가 짝을 이루어 지길 바래. 나는 모든 객체 "_obj"의 속성을 S의 목록을 인쇄하는 방법을 알아 내려고 노력하고 있어요JSON 객체를 Localstorage에 표시합니다.

$("#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)); 
} 
}); 

: 여기

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

내가 절약 및 추가/밀어하고 방법이다. 그러나 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."); 
    } 
} 

자바 스크립트에서 개체 속성은 모든 숫자 값이 될 수 있습니다

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); 

그런 다음, 당신은 단지 저장의 키 값 쌍을 반복 할 수 있으며, 모든 숫자를 찾아 및 시간 :

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는"+ 키); 알림 ("스탄 아래에 저장 됨 :"+ _srtobj2 [key]); if (key.일치 (/ [0-9] + /) { 경고 ("키는 숫자뿐입니다. 스낵이어야합니다."); } } } displayValues ​​(); Uncaught SyntaxError : 예기치 않은 토큰 { – user3259138

+0

if 문에서 두 번째 닫는 괄호를 깜박입니다. 나는 대답을 편집했다. –

관련 문제