我有几个大型多维数组,我正在保存到本地存储。它们看起来像这样:
[[[-150],[0],[-650],0],[[-100],[0],[-650],0],[[-50],[0],[-650],0] ... ]
数据是'4D'数据。当我尝试将这个'string'加载到另一个JS(在单独的html中)的数组中时,它的行为不像数组 - 它只是一个字符串。
以下是我如何将数据加载回第二个JS(不确定为什么循环也不起作用):
var lay= new Array();
//for(var g=0;g>=9;g++)
//{ lay[g] = localStorage.getItem("key" + g);
// console.log(lay[g]);
//}
lay[0] = localStorage.getItem("key0");
lay[1] = localStorage.getItem("key1");
lay[2] = localStorage.getItem("key2");
//... more here
lay[9] = localStorage.getItem("key3");
将这个“4D”信息加载到数组后,我将信息拉出来使用它:
var count=0;
var len=0;
for (y=0;y<=1;y++)
{ console.log(lay[y]);
count=1;
len = lay[y].length;
for (x=1;x<=len-1;x++)
{
Rx = lay[y][count][0];
Ry = lay[y][count][1];
Rz = lay[y][count][2];
Rcolor = lay[y][count][3];
当我将其添加到代码console.log(len);
时,我得到数组中字符的长度,而不是元素的数量。如何从本地存储中获取数据并像数组一样工作?我认为单独的格式化会使它表现得像一个数组。
我是否需要再次将其解析回数组?如果是这样,我猜我应该以更简单的格式输出数据再次解析它......
感谢您的帮助!
以下是我制作本地存储的方式:
for (var a=0;a<=14;a++)
{ updateTemp(tStep + a);
$("#temp tbody tr").each(function(i, v){
data[i] = Array();
$(this).children('td').each(function(ii, vv){
data[i][ii] = $(this).text();
rows=ii;
cols=i;
});
});
retval="";
for (var q=0;q<=cols;q++)
{
for (var w=0;w<=rows;w++)
{
var tempv = data[q][w];
var tX = w*50 - 1000;
var tY = 1*50 - 50;
var tZ = q*50 - 1000;
if (tempv==-9){
(dummy=q*w);
}
else {retval += tX +',' + tY + ',' + tZ + ',' + tempv + ',';}
}
}
var kee = "key" + a;
retval = retval.substring(0, retval.length-1); //this is to get rid of the last character which is an extra ,
window.localStorage.setItem(kee, retval);}
答案 0 :(得分:3)
JSON在存储之前对数组进行编码,在检索之后进行解析。
localStorage.test = JSON.stringify([1,2,3]);
console.log(JSON.parse(localStorage.test));
答案 1 :(得分:-2)
这是“Storing Objects in HTML5 localStorage”的副本。 localstorage
只处理字符串。正如那里建议的那样,在存储之前将数组序列化为JSON字符串。