Tratando de unirse a una matriz bidimensional en Javascript
-
19-09-2019 - |
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.
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);