この質問文だと2つの解釈の仕方があるけど、どっちになるんだろう?
- localStorageからdataキーを除いて全て捨てたい
- localStorageからdata内のアイテムの内、data2以外の値を捨てたい
- localStorageからdataキーを除いて全て捨てたい
まずはJavaScriptの実質のリファレンスみたいなMDNを読もう。
localStorageに関して詳しく乗っている。
localStorageはStorageのインスタンスだからこちらを閲覧すればプロパティやメソッドが全部載っているね。
使えそうなのをピックアップしてみよう
プロパティ(メソッドは括弧付きで表記)
- .length: Storage オブジェクトに保存されているデータアイテムの数を表す整数を返します。
- .key(): このメソッドは数値 n を渡すと、ストレージ内で n 番目のキーの名称を返します。
- .getItem(): キーの名称を渡すと、キーに対する値を返します。
- .setItem(): キーの名称と値を渡すと、ストレージにキーを追加する、または既存のキーに対する値を更新します。
- .removeItem(): キーの名称を渡すと、ストレージからキーを削除します。
- .clear(): このメソッドを呼び出すと、ストレージからすべてのキーを消去します。
したがってlengthプロパティで保存されているキーの数値を確認、
for文を回しつつkeyメソッドを実行してキー名称を取得、
キー名称が削除対象ならremoveItemメソッドで削除。
これが一般的なやり方。
JavaScript
1for (var i = 0; i < localStorage.length; i++) {
2 var key = localStorage.key(i);
3 if (key !== 'data') localStorage.remove(key);
4}
もしdataキーの情報だけ残せれば良いなら、どっか別の変数に退避してclearすればいい。
その後setItemで登録し直せば完成だ。
JavaScript
1var data = localStorage.getItem("data");
2localStorage.clear();
3localStorage.setItem("data", data);
- localStorageからdata内のアイテムの内、data2以外の値を捨てたい
もしこちらなら、捨てたいじゃなくて、
新しい値で保存し直したいという言い方の方が正解になる。
そのまんま新しい値を同名のキー情報でsetItemとやれば良いんだけど、
既存のオブジェクトから特定のキーを抜き出す時はdelete構文を用いると良い
JavaScript
1var oldData = {
2 name: "taro",
3 age: 18
4}
5localStorage.setItem("data", oldData);
6
7// 方法1: 適当に新しいデータで上書き保存
8localStorage.setItem("data", {
9 name: "jiro"
10});
11
12// 方法2: 元のデータを参考にしつつ、特定のキーだけ削除
13var newData = localStorage.getItem("data");
14delete newData.age;
15localStorage.setItem("data", newData);