

KVS 初心者です。 現在 sessionStorage をいじっています。

例えば

[code]

    {id01:{hoge:1, moge:2, hige:5}}
    
[/code]

といったレコードがあります。

この中の `moge` の値だけを `4` に変えたいのですが、いまのとこ `id01` の中身を全取得して `moge` の値を書き直し、また
`id01` をまるごと再保存するしか思いつきません。

[code]

    id01.moge = 4
    
[/code]

といったやり方はできないのでしょうか。


CC BY-SA 3.0
2015-02-16T08:04:28.140
6561
2015-02-16T08:35:18.423
2015-02-16T08:20:57.497
4978
8317
question
javascript html5
KVS (session storage) で特定の値を変更する方法


どのように `sessionStorage` で `hash` を扱っているか分からないですが、基本的に `sessionStorage` は
`key`、`value` 共に `String` 型です。

> Each Storage object provides access to a list of key/value pairs, which are
> sometimes called items. **Keys are strings**. Any string (including the
> empty string) is a valid key. **Values are similarly strings**.

<http://dev.w3.org/html5/webstorage/#the-storage-interface>

そのため、`value` に `hash` を保存する際も `String`
として保存し（`JSON.stringify()`などで）、値を取得する際に複合（`JSON.parse()`などで）しているかと思います。

そのため、直接 `sessionStorage` 内の `value`
をオブジェクトとして取り扱う事はできないため、一度取り出した後に、更新し再度保存する必要があるかと思います。（以下コードのように）

[code]

    // 保存
    var data = {id01:{hoge:1, moge:2, hige:5}};
    sessionStorage.setItem('id01', JSON.stringify(data));
    
    // 取得
    var str = sessionStorage.getItem('id01');
    var item = JSON.parse(str);
    // 更新
    item.moge = 4
    sessionStorage.setItem('id01', JSON.stringify(item));
    
[/code]


CC BY-SA 3.0
2015-02-16T08:35:18.423
6564
2015-02-16T08:35:18.423
2944
6561
answer