771

localStorage が必要ない場合、コードは次のようになります。

var names=new Array(); 
names[0]=prompt("New member name?");

これは機能します。ただし、この変数を localStorage に格納する必要があり、かなり頑固です。私はもう試した:

var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");

どこが間違っていますか?

4

6 に答える 6

1458

localStorage文字列のみをサポートします。とを使用JSON.stringify()JSON.parse()ます。

var names = [];
names[0] = prompt("New member name?");
localStorage.setItem("names", JSON.stringify(names));

//...
var storedNames = JSON.parse(localStorage.getItem("names"));

アイテムの設定/取得に直接アクセスすることもできます:

localstorage.names = JSON.stringify(names);
var storedNames = JSON.parse(localStorage.names);
于 2010-07-28T21:23:36.660 に答える
138

localStorageandはsessionStorage文字列のみを処理できます。デフォルトのストレージ オブジェクトを拡張して、配列とオブジェクトを処理できます。このスクリプトをインクルードして、新しいメソッドを使用するだけです:

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

localStorage.setObj(key, value)配列またはオブジェクトを保存し、localStorage.getObj(key)それを取得するために使用します。同じメソッドがsessionStorageオブジェクトで機能します。

新しいメソッドを使用してストレージにアクセスするだけの場合、すべての値は保存前に JSON 文字列に変換され、getter によって返される前に解析されます。

于 2012-04-11T15:40:44.913 に答える
18

no で提案されているようにJSON.stringify()andを使用してください! JSON.parse()これにより、デリミタを含むメンバー名 (例: member name three|||bars) で発生する、まれではあるが発生する可能性のある問題が回避されます。

于 2010-08-02T21:33:38.630 に答える
8

これを作成しました:

https://gist.github.com/3854049

//Setter
Storage.setObj('users.albums.sexPistols',"blah");
Storage.setObj('users.albums.sexPistols',{ sid : "My Way", nancy : "Bitch" });
Storage.setObj('users.albums.sexPistols.sid',"Other songs");

//Getters
Storage.getObj('users');
Storage.getObj('users.albums');
Storage.getObj('users.albums.sexPistols');
Storage.getObj('users.albums.sexPistols.sid');
Storage.getObj('users.albums.sexPistols.nancy');
于 2012-10-16T18:44:55.760 に答える
4

JSON アプローチは機能します。つまり、7 では json2.js が必要です。それで完全に機能し、1 つのコメントがそうでないと言っているにもかかわらず、localStorage があります。それは本当に手間がかからない最良のソリューションのようです。もちろん、json2 と本質的に同じことを行うスクリプトを作成することもできますが、それにはほとんど意味がありません。

少なくとも次のバージョン文字列には localStorage がありますが、前述のように、json2.js はブラウザー自体に含まれていないため、含める必要があります: 4.0 (互換性あり; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2 ; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; BRI/2; NP06; .NET4.0C; .NET4.0E; Zune 4.7) (私はこれをコメントにしました応答しますが、できません)。

于 2012-04-26T10:04:28.640 に答える
2

別の解決策は、次のように配列を格納するラッパーを作成することです。

localStorage.setItem('names_length', names.length);
localStorage.setItem('names_0', names[0]);
localStorage.setItem('names_1', names[1]);
localStorage.setItem('names_' + n, names[n]);

JSONに変換するオーバーヘッドを取り除きますが、配列のインデックスを再作成する必要があるため、要素を削除する必要がある場合は煩わしいでしょう:)

于 2012-01-09T21:53:34.010 に答える