2010-01-06 21 views
7

Estoy intentando convertir una matriz bidimensional en una cadena para almacenarla en la matriz localStorage. Sin embargo, hay algo mal con este código que no puedo identificar:Intentando unirme a una matriz bidimensional en Javascript

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

¿Alguien tiene una idea de lo que estoy haciendo mal?

En cuanto a lo que está mal, por matriz multidimensional me refiero a matriz [0] [1] etc. Cuando ingresas en localStorage, toda la 'cadena' se reduce a @, lo que implica que al otro lado @ arreglos fijos

+2

¿cuál es el algo que está mal? seguramente, ¿puede decir cuál es su opinión, qué esperaba y cuál es la salida no deseada? –

+0

En una nota al margen, es posible que desee considerar el uso de JSON.stringify en lugar de los separadores personalizados para su propósito. – Tomas

+0

@Thomas: en el momento de escribir este artículo, JSON.stringify no estaba disponible en todos los navegadores (específicamente, no en la versión estable de Chrome). Ahora, usaría eso, sí. –

Respuesta

5

¿Qué es lo que está mal? seguramente, ¿puede decir cuál es su opinión, qué esperaba y cuál es la salida no deseada?

Al menos, si array es de hecho una matriz, no debe utilizar un for..in loop. Eso es para objetos. Solo use un

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

for..in loops se pueden usar para matrices, no es solo para objetos ... siempre que use 'hasOwnProperty'. – vsync

0

Tu código parece funcionar bien para mí, probando en Firefox.

¿Está fallando en un navegador específico?

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 no tiene dos matrices dimensionales. Solo tiene arreglos irregulares. Su código funciona para mí por una entrada apropiada:

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

Salida:

1`[email protected]`4 

¿Nos lo está utilizando de entrada y mostrar lo que la salida se obtiene?

0

JSON es ahora estándar en los navegadores modernos. Puede usarlo para "stringificar" (convertir a una cadena JSON) y convertir "analizar" de una cadena JSON.

Puede usar la función JSON.stringify para convertir su matriz 2D a JSON y pegarla en localStorage. Luego puede usar JSON.parse para convertirlo a una matriz.

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

var backToOriginal = JSON.parse(localStorage[key]); 
+2

En enero de 2010, JSON no estaba disponible como tal en navegadores estables. ;) –

4

Hoy en día esto es tan simple como:

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