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.

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top