我在这里遇到一些问题,我有一个像这样的数组:
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];
}
答案 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);
答案 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 );
})