在JavaScript中尝试连接一个二维数组

13

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

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

有人知道我哪里出错了吗?

说到出错的问题,我指的是多维数组,比如array[0][1]之类的。 当存储到localStorage中时,所有的“string”都被缩减为@,暗示在@的另一侧仍然存在数组。


2
有什么问题出现了吗?你肯定可以说出你的输入是什么,期望得到什么输出,以及不希望得到的输出是什么? - Roland Bouman
顺便提一下,您可能要考虑使用JSON.stringify而不是自定义分隔符来实现您的目的。 - Tomas
@Thomas - 写这篇文章时,JSON.stringify在所有浏览器中都不可用(特别是在Chrome的稳定版本中)。现在,我会使用它,是的。 - Arda Xi
5个回答

31

如今这很简单:

[[1,2],[3,4]].map(e => e.join(':')).join(';'); // 1:2;3:4

5

有什么出错了吗?当然,你可以说出你的输入是什么,期望得到什么输出,以及不希望得到的输出是什么。

至少,如果array确实是一个数组,就不应该使用for..in循环。那只适用于对象。只需使用

for (var i=0, l=array.length; i<l; i++){
    if (array[i] instanceof Array){
        array[i] = array[i].join("`");
    }
}

4
使用'hasOwnProperty',for..in 循环可用于数组,不仅适用于对象。 - vsync

2
< p > JSON 现在已成为现代浏览器的标准。您可以使用它来“stringify”(将其转换为JSON字符串)和“parse”(从JSON字符串转换)。

您可以使用JSON.stringify函数将您的2D数组转换为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]);

2
回到2010年1月,JSON在稳定的浏览器中并不是现成的。;) - Arda Xi

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

你能向我们展示你正在使用什么输入以及获得了什么输出吗?


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接