2013-07-31 6 views
1

내가 여기에 약간의 문제가있어, 난이 같은 배열을 가지고 :배열과 로컬 스토리지

function crearObjetos() 
{ 
    var palabraPeso = "peso"; 
    var palabraFecha = "Fecha"; 
    var localStorageKey000 = "objetosPesoFecha"; 
    var contador = 0; 
    var pesoFecha = new Array(); //THE ARRAY 
    while(contador < 365) 
    { 
     var nuevoObjeto = new Object; 
     var fechaActual = new Date(); 
     nuevoObjeto.peso = 0; 
     nuevoObjeto.fecha = fechaActual; 
     nuevoObjeto.id = contador; 
     pesoFecha[contador] = nuevoObjeto; //SAVE OBJECTs IN THE ARRAY 
     contador = contador +1; 

    } 
    if (Modernizr.localstorage) 
    { 
    localStorage.setItem(localStorageKey000, pesoFecha); //STORAGE THE ARRAY 
    } 
} 

문제는 내가 로컬 스토리지의 배열을로드하려고 할 때, 그, 내가 할 수없는 액세스를하다

function damePrimerObjetoPesoFecha() 
{ 
    //LOAD THE ARRAY FROM LOCAL STORAGE 
    var localStorageKey000 = "objetosPesoFecha"; 
    var arrayDeObjetos = localStorage.getItem(localStorageKey000); 

    //CHECK IN AN ALERT IF THE DATA IS OK 
    alert("El primero que devuelve"+arrayDeObjetos[0].id); 

    //RETURN THE FIRSTONE 
    return arrayDeObjetos[0]; 
} 

답변

2

입니다. 거기에 JSON.stringify을 사용해야합니다. 이 라인 :

localStorage.setItem(localStorageKey000, pesoFecha); 

localStorage에서 검색 할 때, 당신은 다시 JSON으로 변환하는 데에 JSON.parse를 사용해야합니다

마찬가지로
localStorage.setItem(localStorageKey000, JSON.stringify(pesoFecha)); 

을 변경해야합니다. 이 라인 :

var arrayDeObjetos = localStorage.getItem(localStorageKey000); 

이어야합니다 : 첫 번째 데이터에 액세스 할 때

var arrayDeObjetos = JSON.parse(localStorage.getItem(localStorageKey000)); 

지금, 당신은 늘 undefined를 얻을.

jStorage 플러그인은 localStorage 주위의 래퍼입니다. 배열 또는 객체를 전달하면 모든 파싱 문제가 발생하고 그 자체로 처리합니다.

희망이 도움이됩니다.

+0

도움을 많이 주셔서 감사합니다. 나는이 방법으로 작동시킬 수 있습니다! 다시 한 번, 빠른 답변 주셔서 감사합니다! –

1

localstorage 수에만 매장 문자열 : 여기 (이 경우 첫 번째 objetc에) 배열에서 데이터를로드하는 방법입니다 ... 모든 데이터는 모두 "정의되지 않은"하고 이유를 모르겠어 .

배열 & 개체를 저장하려면 JSON으로 변환해야합니다. 여기

// Store the array: 
LS.set(localStorageKey000, pesoFecha); 

// Retrieve the array: 
var arrayDeObjetos = LS.get(localStorageKey000); 

는 바이올린의 : 다음과 같이

var LS = { 
    set: function (key, val) { 
     return localStorage.setItem(key, JSON.stringify(val)); 
    }, 
    get: function (key) { 
     return JSON.parse(localStorage.getItem(key)); 
    } 
}; 

그것을 사용하여 여기에

작은 도우미의 http://jsfiddle.net/KkgXU/ 배열이 얼마나 좋아 localStorage로 밀어 수 없습니다

+0

도와 주셔서 감사합니다 많이! –

1

localStorage는 데이터를 문자열로만 저장합니다.
당신은 JSON으로 배열을 strinify하고 저장 한 다음이

localStorage.setItem(localStorageKey000, JSON.stringify(pesoFecha)); //STORAGE THE ARRAY 

var arrayDeObjetos = JSON.parse(localStorage.getItem(localStorageKey000)); 
+0

많은 사람에게 고마워, 정말 도움이! –

1

하려면 로컬에만 문자열을 저장할 수로드 할 때 그것을 다시 구문 분석 할 수 있습니다. JSON.stringify는 날짜 객체를 문자열로 변환하므로 JSON.parse를 통해 deserialize 할 때 해당 문자열을 기반으로 각 객체의 날짜를 수동으로 만들어야한다는 것을 기억해야합니다. 첫째 :

localStorage.setItem(localStorageKey000, JSON.stringify(pesoFecha)); 

다음

var arrayDeObjetos = JSON.parse(localStorage.getItem(localStorageKey000)); 
arrayDeObjetos.forEach(function(objecto){ 
     objecto.fecha = new Date(objecto.fecha); 
}) 
+0

고마워, 이건 정말 도움이! –