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

问题是,当我尝试在本地存储中加载数组时,我无法访问任何数据,所有数据都是“未定义的”,我不知道为什么......这是我从数组中加载数据的方式(在这种情况下,只有第一个 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

4 回答 4

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. 如果您将数组或对象传递给它,它将从您那里获取所有解析问题并自行完成。

希望这可以帮助!

于 2013-07-31T19:05:59.903 回答
1

localstorage只能存储字符串。

如果要存储数组和对象,则应将它们转换为 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/

于 2013-07-31T19:05:22.163 回答
1

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

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

var arrayDeObjetos = JSON.parse(localStorage.getItem(localStorageKey000));
于 2013-07-31T19:07:20.703 回答
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 );
 })
于 2013-07-31T19:07:26.957 回答