Question

Je suis en train de convertir un tableau à deux dimensions à une chaîne afin de le stocker dans le tableau localStorage. Cependant, il y a quelque chose de mal avec ce code, je ne peux pas identifier:

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

Est-ce que quelqu'un a une idée de ce que je fais mal?

En ce qui concerne ce qui ne va pas, par tableau multidimensionnel, je veux dire tableau [0] [1], etc. Lorsque l 'entrée en localStorage, toute la « chaîne » est réduite à @ est, ce qui implique de l'autre côté du @ il y a encore des tableaux.

Était-ce utile?

La solution

ce qui est quelque chose qui ne va pas? sûrement, vous UCAN dire ce que votre entrée est, ce que vous attendiez, et ce que la sortie est indésirable?

Au moins, si array est en effet un tableau, vous ne devriez pas utiliser un for..in loop. C'est pour les objets. Il suffit d'utiliser un

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

Autres conseils

est aujourd'hui aussi simple que:

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

JSON est maintenant standard moderne les navigateurs. Vous pouvez l'utiliser pour « stringify » (convertir en une chaîne JSON) et « analyser » convertir une chaîne JSON.

Vous pouvez utiliser la fonction JSON.stringify pour convertir votre tableau 2D à JSON et le coller dans localStorage. Ensuite, vous pouvez utiliser JSON.parse pour le reconvertir en un tableau.

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

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

Javascript ne dispose pas de deux tableaux de dimensions. Il n'a que des tableaux déchiquetés. Votre code fonctionne pour moi une entrée appropriée:

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);

Sortie:

1`2@3`4

Pouvez-vous nous montrer ce que l'entrée que vous utilisez et ce que la sortie que vous obtenez?

Votre code semble fonctionner très bien pour moi, le test dans Firefox.

Est-il échoue dans un navigateur spécifique?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top