2010-01-06 2 views
7

Я пытаюсь преобразовать двумерный массив в строку, чтобы сохранить его в массиве localStorage. Однако с этим кодом я не могу идентифицировать:Попытка присоединиться к двумерному массиву в Javascript

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

Есть ли у кого-нибудь идеи, что я делаю неправильно?

Что касается неправильного, то многомерным массивом я имею в виду массив [0] [1] и т. Д. При вводе в localStorage вся строка «сведена вниз» равна @, подразумевая на другой стороне @ все еще массивы.

+2

, что это то, что не так? конечно, вы, ucan, говорите, что ваш вход, что вы ожидали, и что такое нежелательный вывод? –

+0

На боковой панели вы можете захотеть использовать JSON.stringify вместо пользовательских разделителей для вашего объекта. – Tomas

+0

@Thomas. На момент написания статьи JSON.stringify не был доступен во всех браузерах (в частности, не в стабильной версии Chrome). Теперь, я бы использовал это, да. –

ответ

5

Что-то не так? конечно, вы, ucan, говорите, что ваш вход, что вы ожидали, и что такое нежелательный вывод?

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

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

Для циклов in..in можно использовать для массивов, это не только для объектов ... пока вы используете «hasOwnProperty». – vsync

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); 
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`[email protected]`4 

Не могли бы вы показать нам, что вход вы используете, и какие выходные вы получите?

0

JSON теперь стандартный в современных браузерах. Вы можете использовать его для «stringify» (конвертировать в строку JSON) и «разбора» конвертировать из строки 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 года JSON не был доступен как таковой в стабильных браузерах. ;) –

4

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

[[1,2],[3,4]].map(e => e.join(':')).join(';'); // 1:2;3:4 
Смежные вопросы