質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

6397閲覧

localStorageで一部のkey/valueを残して削除したい

moro123

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/03/06 11:56

こんばんは。

表題の件について質問があります。

下記のような構造をlocalStorageに保存した後、初期化をしたい時に**localStorage.clear()**をすると全てのkey/valueが削除されてしまうので、一部の残して削除する場合どのように書けばよろしいでしょうか。

storage = { data1:hoge1, data2:hoge2, data3:hoge3 } localStorage.setItem("data", storage); 初期化 → どう書けばいいか?? ↓ localStorage.getItem("data"); storage = { data2:hoge2, } 一部のkey/valueだけ残したい

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/06 12:04 編集

これだけだと大目的部分が不明です。用途を具体的に記載してください。 単にgetItemしてきて削除したい配列のキーだけ削除してsetItemで戻すだけではダメですか? clearは本当に全削除なので通常key指定で削除できるlocalStorage.removeItem()を利用しますが、そのオブジェクトのデータを1つまとめてではなく、1つずつ(今回だと3つ)setItemするのではだめなのでしょうか。
guest

回答1

0

ベストアンサー

この質問文だと2つの解釈の仕方があるけど、どっちになるんだろう?

  • localStorageからdataキーを除いて全て捨てたい
  • localStorageからdata内のアイテムの内、data2以外の値を捨てたい
  1. 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);
  1. 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);

投稿2019/03/06 12:18

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moro123

2019/03/08 10:07

ご回答ありがとうございます。 言葉足らず申し訳ございませんでした。 2. localStorageからdata内のアイテムの内、data2以外の値を捨てたい こちらの方法で解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問