2013-04-18 10 views
23

の配列に私はJavaScriptで機能を持っている:プッシュJSONオブジェクトのlocalStorage

var a = []; 
function SaveDataToLocalStorage(data) 
{  
    var receiveddata = JSON.stringify(data); 
    a.push(receiveddata); 
    alert(a); 

    localStorage.setItem('session', a); 

} 

データパラメータはJSONオブジェクトです。

しかし、私はボタンをクリックするたびに、私のローカルストレージ内のデータを上書きします。

誰でもこの方法を知っていますか?

+1

に解析されます、それを使用して、これらのメソッドに

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

を使用すると、 'window.aを使用してみてくださいすることを実現することができるように

のlocalStorageは、文字列のみを扱うことができます= []; 'これを押してください。 'window.a.push(receiveddata)'。または、関数の最初に新しい "a"に一度格納します。 –

+0

まだ上書きされています – nielsv

+0

実際の入力でも実行していますか? 'localStorage.setItem( 'session'、window.a);' –

答えて

56

あなたが正しくあなたのlocalStorageにこの情報を格納するために必要ないくつかのステップがあります。しかし、コードに入る前に、localstorage(現時点で)は文字列以外のデータ型を保持できないことに注意してください。記憶域のために配列をシリアル化してから、それを解析して変更を加える必要があります。

ステップ1:あなたはすでにあなたのlocalStorage session変数にシリアライズされた配列を格納していない場合

次の最初のコードスニペットにのみ実行する必要があります。あなたのlocalStorageを確保するため
が適切に設定され、配列を格納し、最初に次のコードスニペットを実行します。

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

上記のコードは唯一たらを実行する必要があり、あなたがすでに配列を格納していない場合にのみ、あなたのlocalStorage session変数の。そのようなあなたの関数を変更し

:あなたはすでにこれをやっている場合2.

ステップ2に進みこれはあなたのための残りの世話をする必要があります

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

。それを解析すると、オブジェクトの配列になります。

これが役に立ちます。 1つのlocalStorageエントリに配列全体を置く

+0

あなたは最高です!ありがとう! – nielsv

+0

@ user1775531問題はありません!喜んで助けてください。幸運と幸せなコーディング! :) – War10ck

+0

ありがとう。あなたは別のアレイとしてlocalstorageからどのように取得できるのか知っていますか? – nielsv

8

今のところ、は、ローカルストアに文字列値を格納することができます。配列オブジェクトをシリアル化してからlocalStorageに格納する必要があります。例えば

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

または

localStorage.setItem('session', JSON.stringify(a)); 
-1
var arr = [ 'a', 'b', 'c']; 
arr.push('d'); // insert as last item 
5

は非常に非効率的である:全体のことは、あなたが配列に何かを追加または1つのエントリを変更するたびに再エンコードする必要があります。

代わりに、http://rhaboo.orgを使用して、各端末値に別のlocalStorageエントリを使用して、深くネストされたJSオブジェクトを格納します。配列が非数値プロパティとスパースの様々なタイプ、オブジェクトのプロトタイプを含め、はるかに忠実に復元されている/コンストラクタは、標準的なケースでは復元され、APIはludicrously単純です:

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

はところで、私はそれを書きました。

+0

それは素晴らしい図書館です!ありがとう! –

2

オブジェクトと配列を処理するためにストレージオブジェクトを拡張することをお勧めします。あなたは、すべての値がセットにJSON文字列に変換し、取得

関連する問題