从本地存储加载数组:结果不是数组 - javascript

时间:2014-05-12 19:30:15

标签: javascript arrays

我有几个大型多维数组,我正在保存到本地存储。它们看起来像这样:

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

2 个答案:

答案 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字符串。