Domanda

Sto cercando di convertire un array bidimensionale in una stringa per memorizzarlo nella matrice localStorage. Tuttavia, c'è qualcosa di sbagliato in questo codice non riesco a identificare:

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

Qualcuno ha idea di cosa sto facendo male?

Per quanto riguarda ciò che è sbagliato, per array multidimensionale intendo array [0] [1] ecc Quando l'ingresso in localStorage, tutta la 'stringa' si riduce a è @, implicando sull'altro lato del @ ci sono ancora array.

È stato utile?

Soluzione

qual è la cosa che è sbagliato? sicuramente, è Ucan dire che cosa il vostro input è, quello che ti aspettavi, e ciò che l'uscita indesiderata è?

Almeno, se array è davvero una matrice, non si dovrebbe utilizzare un for..in loop. Questo è per gli oggetti. Basta usare un

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

Altri suggerimenti

Al giorno d'oggi questo è semplice come:

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

JSON la standardizzazione in moderno i browser. Si può usare per "stringa i" (convertire in una stringa JSON) e "analizzare" la conversione da una stringa JSON.

È possibile utilizzare la funzione JSON.stringify per convertire l'array 2D a JSON e incollarla in localStorage. Quindi è possibile utilizzare JSON.parse per riconvertirlo in un array.

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

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

Javascript non ha due array bidimensionali. Ha array solo frastagliati. Il tuo codice funziona per me per un ingresso adeguato:

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

Ci può quello di ingresso che si sta utilizzando mostrare e quello di uscita che si ottiene?

Il tuo codice sembra funzionare bene per me, il test in Firefox.

E 'venendo a mancare in un browser specifico?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top