Cercando di far parte di un array bidimensionale in Javascript
-
19-09-2019 - |
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.
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);