Je me demande simplement comment intégrer toutes les valeurs clés localStorage
.
J'ai essayé de récupérer les valeurs avec une simple boucle JavaScript
for (var i=1; i <= localStorage.length; i++) {
alert(localStorage.getItem(i))
}
Mais cela ne fonctionne que si les touches sont des nombres progressifs, commençant à 1.
Comment obtenir toutes les clés, afin d'afficher toutes les données disponibles?
javascript
html
key
local-storage
Simone
la source
la source
Réponses:
dans ES2017, vous pouvez utiliser:
la source
Object.keys()
fonctionne comme prévu aussi?EDIT: cette réponse reçoit beaucoup de votes positifs, donc je suppose que c'est une question courante. J'ai l'impression que je le dois à quiconque pourrait tomber sur ma réponse et penser que c'est «juste» simplement parce qu'il a été accepté de faire une mise à jour. La vérité est que l'exemple ci-dessus n'est pas vraiment la bonne façon de procéder. Le moyen le meilleur et le plus sûr est de le faire comme ceci:
la source
localStorage.length
et ne pas l'utiliser directement? 2) Pourquoi le déclarer dans la boucle for? 3) Pourquoi++i
est-il préféréi++
?++i
ne fait certainement pas démarrer la boucle ài = 1
. La troisième expression entre parenthèses est évaluée après chaque itération.i++
et les++i
deux ont exactement le même effet suri
. La différence est que++i
s'évalue à la nouvelle valeur dei
après l'incrémentation, alors quei++
s'évalue à la valeur dei
avant l' incrémentation. Cela ne fait absolument aucune différence ici, car tout ce qui nous importe, c'est l'effet secondaire de l'incrémentationi
, pas la valeur de l'expression.Object.keys(localStorage)
fonctionne parfaitement bien pour ce scénario, tant que vous n'avez pas besoin de prendre en charge IE <9.localStorage.key( i )
partie.J'aime en créer un objet facilement visible comme ça.
Je fais la même chose avec les cookies.
la source
la source
Vous pouvez utiliser la
localStorage.key(index)
fonction pour renvoyer la représentation sous forme de chaîne, oùindex
est le nième objet que vous souhaitez récupérer.la source
Si le navigateur prend en charge HTML5 LocalStorage, il doit également implémenter Array.prototype.map, en activant ceci:
la source
new Array(this.localStorage.length).fill(0)
ce qui est un peu moins piraté que d'utiliser apply imo.Puisque la question mentionnait la recherche des clés, j'ai pensé que je mentionnerais que pour afficher chaque paire clé et valeur, vous pourriez le faire comme ceci (en fonction de la réponse de Kevin):
Cela enregistrera les données au format «clé: valeur»
(Kevin: n'hésitez pas à prendre cette information dans votre réponse si vous le souhaitez!)
la source
Cela imprimera toutes les clés et valeurs sur localStorage:
ES6:
la source
Vous pouvez obtenir des clés et des valeurs comme ceci:
la source
Je suis d'accord avec Kevin, il a la meilleure réponse, mais parfois, lorsque vous avez différentes clés dans votre stockage local avec les mêmes valeurs, par exemple, vous voulez que vos utilisateurs publics voient combien de fois ils ont ajouté leurs articles dans leurs paniers, vous devez leur montrer le nombre de fois alors vous pouvez utiliser ceci:
la source
Pour ceux qui mentionnent utiliser
Object.keys(localStorage)
... ne le faites pas parce que cela ne fonctionnera pas dans Firefox (ironiquement parce que Firefox est fidèle à la spécification). Considère ceci:Parce que key, getItem et setItem sont des méthodes prototypiques
Object.keys(localStorage)
ne retournera que["key2"]
.Il vaut mieux faire quelque chose comme ceci:
la source
object.keys()
... Je mettrai à jour ma réponse pour refléter cela.[Exposed=Window]
. Cela se traduit par le comportement que je décris. Si elle était spécifiée avec[Exposed=Window,OverrideBuiltins]
elle donnerait le comportement attendu, mais la spécification ne le spécifie pasOverrideBuiltins
. Vous pouvez voir une discussion à ce sujet dans whatwg / html ici: github.com/whatwg/html/issues/183On peut aussi lire par le nom.
Disons que nous avons enregistré la valeur avec le nom «utilisateur» comme ceci
Ensuite, nous pouvons le lire en utilisant
Je l'ai utilisé et il fonctionne bien, pas besoin de faire la boucle for
la source