数组和Localstorage

时间:2013-07-31 19:03:12

标签: javascript arrays html5 jquery-mobile local-storage

我在这里遇到一些问题,我有一个像这样的数组:

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
  }
}

问题在于,当我尝试在本地存储中加载数组时,我无法访问任何数据,所有都是“未定义”,我不知道为什么......这是我如何从中加载数据数组(在这种情况下只是第一个objetc):

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];
}

4 个答案:

答案 0 :(得分:2)

无法将数组推入localStorage,就像它一样。您必须使用JSON.stringify。这一行:

localStorage.setItem(localStorageKey000, pesoFecha);

必须更改为

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

同样,当您从localStorage检索它时,必须使用JSON.parse将其转换回JSON。这一行:

 var arrayDeObjetos = localStorage.getItem(localStorageKey000);

必须是:

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

现在,当您访问第一个数据时,您将无法获得undefined

另一个替代方案是jStorage插件,它是localStorage的包装。如果您将数组或对象传递给它,它将从您那里获取所有解析问题并自行完成。

希望这有帮助!

答案 1 :(得分:1)

localstorage只能存储字符串。

如果你想存储数组&amp;对象,您应该将它们转换为JSON。

这是一个小帮手:

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

按如下方式使用:

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

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

这是小提琴:http://jsfiddle.net/KkgXU/

答案 2 :(得分:1)

localStorage仅将数据存储为字符串 您可以将数组串行化为JSON并保存,然后在加载时将其解析回来

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

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

答案 3 :(得分:1)

LocalStorage只能存储字符串。您还需要记住JSON.stringify将日期对象转换为字符串,因此在通过JSON.parse进行反序列化时,您需要根据该字符串从数组中手动​​创建每个对象的日期。 首先:

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

然后

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