Tentando juntar a uma matriz bidimensional em Javascript
-
19-09-2019 - |
Pergunta
Eu estou tentando converter uma matriz bidimensional para uma cadeia, a fim de armazená-lo na matriz localStorage. No entanto, há algo de errado com este código não pode identificar:
for(x in array) {
if(array[x] instanceof Array) {
array[x] = array[x].join("`");
}
}
var string = array.join("@");
localStorage[key] = string;
Alguém tem uma idéia do que estou fazendo de errado?
Quanto ao que há de errado, por matriz multidimensional I gama média [0] [1] etc. Quando a entrada em localStorage, toda a 'string' é reduzida a é @, o que implica no outro lado do @ ainda existem matrizes.
Solução
O que é a algo que é errado? Certamente, você UCAN dizer o que o seu contributo é, o que você esperava, e que a saída indesejada é?
Pelo menos, se array
é de fato um array, você não deve usar um for..in loop
. Isso é para objetos. Basta usar um
for (var i=0, l=array.length; i<l; i++){
if (array[i] instanceof Array){
array[i] = array[i].join("`");
}
}
Outras dicas
Hoje em dia isso é tão simples como:
[[1,2],[3,4]].map(e => e.join(':')).join(';'); // 1:2;3:4
JSON
é agora um padrão em moderno navegadores. Você pode usá-lo para "stringify" (convertido para uma string JSON) e converso "análise" de uma string JSON.
Você pode usar a função JSON.stringify
para converter sua matriz 2D para JSON e colá-la em localStorage
. Então você pode usar JSON.parse
para convertê-lo de volta para uma matriz.
var my2DArray = [[1, 2, 3], [4, 5, 6]];
var stringified = JSON.stringify(my2DArray);
localStorage[key] = stringified;
var backToOriginal = JSON.parse(localStorage[key]);
Javascript não tem duas matrizes dimensionais. Ele só tem irregular matrizes. Seu código funciona para mim para uma entrada apropriada:
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);
Output:
1`2@3`4
Você poderia nos o que de entrada você estiver usando mostrar e que saída que você tem?
Seu código parece funcionar bem para mim, testando no Firefox.
É falhando em um 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);