Pregunta

Estoy tratando de convertir una matriz de dos dimensiones a una cadena con el fin de almacenarla en la matriz de almacenamiento local. Sin embargo, hay algo mal con este código no puedo identificar lo siguiente:

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 quiero decir array [0] [1], etc. Cuando la entrada en localStorage, toda la 'cadena' se reduce a es @, lo que implica en el otro lado de la @ todavía hay matrices.

¿Fue útil?

Solución

¿qué es ese algo que está mal? Seguramente, usted uCan decir cuál es su entrada, lo que se esperaba, y lo que la salida no deseada es?

Al menos, si array es de hecho una matriz, no debe utilizar un for..in loop. Eso es para los objetos. Sólo tiene que utilizar un

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

Otros consejos

Hoy en día esto es tan simple como:

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

JSON es ahora estándar en la moderna navegadores. Se puede utilizar para "stringify" (convertir en una cadena JSON) y "analizar" convertir de una cadena JSON.

Puede utilizar la función JSON.stringify para convertir su matriz 2D a JSON y pegarlo en localStorage. A continuación, puede utilizar JSON.parse a convertir de nuevo 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]);

Javascript no tiene matrices de dos dimensiones. Tiene solamente matrices 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`2@3`4

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

Su código parece funcionar bien para mí, poniendo a prueba 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top