13

我正在尝试将二维数组转换为字符串,以便将其存储在 localStorage 数组中。但是,我无法识别此代码有问题:

for(x in array) {
    if(array[x] instanceof Array) {
        array[x] = array[x].join("`");
    }
}
var string = array.join("@");
localStorage[key] = string;

有谁知道我做错了什么?

至于有什么问题,多维数组我的意思是数组[0][1]等。当输入到localStorage时,所有的“字符串”都被简化为@,这意味着在@的另一边仍然有数组。

4

5 回答 5

32

如今,这很简单:

[[1,2],[3,4]].map(e => e.join(':')).join(';'); // 1:2;3:4
于 2016-12-02T11:06:40.777 回答
5

出了什么问题?当然,你可以说出你的输入是什么,你的期望是什么,以及不想要的输出是什么?

至少,如果array确实是一个数组,则不应使用for..in loop. 那是为了对象。只需使用一个

for (var i=0, l=array.length; i<l; i++){
    if (array[i] instanceof Array){
        array[i] = array[i].join("`");
    }
}
于 2010-01-06T21:01:21.790 回答
2

JSON现在是现代浏览器的标准。您可以使用它来“字符串化”(转换为 JSON 字符串)和“解析”从 JSON 字符串转换。

您可以使用该JSON.stringify函数将二维数组转换为 JSON 并将其粘贴到localStorage. 然后,您可以使用JSON.parse将其转换回数组。

var my2DArray = [[1, 2, 3], [4, 5, 6]];
var stringified = JSON.stringify(my2DArray);
localStorage[key] = stringified;

var backToOriginal = JSON.parse(localStorage[key]);
于 2015-02-27T23:32:19.197 回答
1

Javascript没有二维数组。它只有参差不齐的数组。您的代码适用于我的适当输入:

array = [[1,2],[3,4]];
for(x in array) {
    if(array[x] instanceof Array) {
        array[x] = array[x].join("`");
    }
}
var string = array.join("@");
alert(string);

输出:

1`2@3`4

你能告诉我们你正在使用什么输入以及你得到什么输出吗?

于 2010-01-06T20:59:07.247 回答
0

您的代码对我来说似乎工作正常,在 Firefox 中进行测试。

它是否在特定浏览器中失败?

var array = [
["a","b"],
["c","d","e"]];
for(x in array) {
    if(array[x] instanceof Array) {
        array[x] = array[x].join("`");
    }
}
var string = array.join("@");
console.log(string);
于 2010-01-06T20:58:26.850 回答