【问题标题】:Arrays and Localstorage数组和本地存储
【发布时间】:2013-08-01 11:19:21
【问题描述】:

我这里有点问题,我有一个这样的数组:

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

【问题讨论】:

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


    【解决方案1】:

    一个数组不能像它一样被推入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 的包装器。如果您将数组或对象传递给它,它将从您那里获取所有解析问题并自行完成。

    希望这会有所帮助!

    【讨论】:

    • 非常感谢您的帮助,我可以让它这样工作!再次感谢您的快速答复!
    【解决方案2】:

    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/

    【讨论】:

    • 非常感谢您的帮助!
    【解决方案3】:

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

    【讨论】:

    • 非常感谢,这真的很有帮助!
    【解决方案4】:

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

    localStorage.setItem(localStorageKey000, JSON.stringify(pesoFecha)); //STORAGE THE ARRAY
    
    var arrayDeObjetos = JSON.parse(localStorage.getItem(localStorageKey000));
    

    【讨论】:

      猜你喜欢
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多