Poussez les objets JSON à array dans localStorage

J'ai une fonction en Javascript:

var a = []; function SaveDataToLocalStorage(data) { var receiveddata = JSON.stringify(data); a.push(receiveddata); alert(a); localStorage.setItem('session', a); } 

Le paramètre de données est un objet JSON.

Mais chaque fois que je clique sur le bouton, il écrase les données dans mon stockage local.

Est-ce que quelqu'un sait comment faire cela?

Il y a quelques étapes à suivre pour stocker correctement cette information dans votre magasin local. Cependant, avant de passer au code, notez que localStorage (à l'heure actuelle) ne peut contenir aucun type de données sauf pour les chaînes. Vous devrez sérialiser le tableau pour le stockage, puis analyser de nouveau pour y apporter des modifications.

Étape 1:

Le premier extrait de code ci-dessous ne devrait être exécuté que si vous ne stockez pas déjà un tableau sérialisé dans votre variable de session localStorage.
Pour vous assurer que votre localStorage est correctement configuré et stocké un tableau, exécutez d'abord l'extrait de code suivant:

 var a = []; a.push(JSON.parse(localStorage.getItem('session'))); localStorage.setItem('session', JSON.stringify(a)); 

Le code ci-dessus ne doit être exécuté qu'une fois et uniquement si vous ne stockez pas déjà un tableau dans votre variable de session localStorage. Si vous faites déjà ce passez à l'étape 2.

Étape 2:

Modifiez votre fonction comme suit:

 function SaveDataToLocalStorage(data) { var a = []; // Parse the serialized data back into an aray of objects a = JSON.parse(localStorage.getItem('session')); // Push the new data (whether it be an object or anything else) onto the array a.push(data); // Alert the array value alert(a); // Should be something like [Object array] // Re-serialize the array back into a string and store it in localStorage localStorage.setItem('session', JSON.stringify(a)); } 

Cela devrait vous occuper du reste. Lorsque vous l'analysez, cela deviendra un éventail d'objets.

J'espère que cela t'aides.

À partir de maintenant, vous ne pouvez enregistrer que des valeurs de chaîne dans localStorage. Vous devrez sérialiser l'objet array, puis le stocker dans localStorage.

Par exemple:

 localStorage.setItem('session', a.join('|')); 

ou

 localStorage.setItem('session', JSON.stringify(a)); 

Mettre un tableau entier dans une entrée localStorage est très inefficace: tout doit être recodé chaque fois que vous ajoutez quelque chose au tableau ou modifiez une entrée.

Une alternative est d'utiliser http://rhaboo.org qui stocke n'importe quel objet JS, si profondément imbriqué, en utilisant une entrée de stockage local distincte pour chaque valeur de terminal. Les tableaux sont restaurés beaucoup plus fidèlement, y compris les propriétés non numériques et les différents types de ressourcement, les prototypes / constructeurs d'objets sont restaurés dans des cas standard et l'API est ridiculement simple:

 var store = Rhaboo.persistent('Some name'); store.write('count', store.count ? store.count+1 : 1); store.write('somethingfancy', { one: ['man', 'went'], 2: 'mow', went: [ 2, { mow: ['a', 'meadow' ] }, {} ] }); store.somethingfancy.went[1].mow.write(1, 'lawn'); 

D'ailleurs, je l'ai écrit.

Une chose que je peux vous suggérer est d'étendre l'objet de stockage pour gérer des objets et des tableaux.

LocalStorage ne peut gérer que des chaînes de caractères afin que vous puissiez le faire en utilisant ces méthodes

 Storage.prototype.setObj = function(key, obj) { return this.setItem(key, JSON.stringify(obj)) } Storage.prototype.getObj = function(key) { return JSON.parse(this.getItem(key)) } 

En l'utilisant, toutes les valeurs seront converties en json string sur set et parsed on get

Je pense que vous devez d'abord récupérer les données de localStorage, faire votre manipulation avec elle et la renvoyer.

Quelque chose comme ca :

 var a = []; function SaveDataToLocalStorage(data) { a = localStorage.getItem('session'); var receiveddata = JSON.stringify(data); a.push(receiveddata); alert(a); localStorage.setItem('session', a); } 
 var arr = [ 'a', 'b', 'c']; arr.push('d'); // insert as last item