Попытка присоединиться к двумерному массиву в Javascript - PullRequest
12 голосов
/ 06 января 2010

Я пытаюсь преобразовать двумерный массив в строку, чтобы сохранить его в массиве 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 вся 'строка' сокращается до @, что означает, что с другой стороны от @ все еще есть массивы.

Ответы [ 5 ]

12 голосов
/ 02 декабря 2016

В наше время это так просто, как:

[[1,2],[3,4]].map(e => e.join(':')).join(';'); // 1:2;3:4
5 голосов
/ 07 января 2010

что то не так? конечно, вы можете сказать, что вы вводите, что вы ожидали, и что такое нежелательный результат?

По крайней мере, если array действительно массив, вы не должны использовать for..in loop. Это для объектов. Просто используйте

for (var i=0, l=array.length; i<l; i++){
    if (array[i] instanceof Array){
        array[i] = array[i].join("`");
    }
}
1 голос
/ 28 февраля 2015

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]);
1 голос
/ 06 января 2010

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 голосов
/ 06 января 2010

Мне кажется, ваш код работает нормально, тестируя в 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);
...