2

HTML5 のローカル ストレージを使用して、ユーザー設定の小さなデータベースを保存しています。そのために、次の機能があります。

function save(UserDB) {
    if (window.localStorage) {  // Only do this if the browser supports it
        localStorage.setObject('UserDataBase', JSON.stringify(UserDB));
    }

Storage.prototype.setObject = function(key, value) {
    this.setItem(key, JSON.stringify(value));
}

UserDB は、次のようなオブジェクトの配列です。

[{"uid":"ABC","groupname":"マイ グループ","calendarid":"sdf44d7g3ak5q8ifdrl308hk0@group.calendar.google.com","link":null,"userenable":true,"color" :"528800"},{"uid":"CdO","groupname":"CKHO","calendarid":"apkrty45sdfer44fd1mr55dfghfg8@group.calendar.google.com","link":null,"userenable":true ,"色":"AB8B00"}]

これはうまくいくようです。

次に、ユーザーがサイトを再度ロードしたときに、前のセッションで保存された情報から変数内のオブジェクト配列を再生成できるようにしたいと考えています。

Storage.prototype.getObject = function(key) {
        var value = JSON.parse(this.getItem(key));
        return JSON.parse(value);
    }

これも機能するようです。問題は、この最後の関数を使用して実際に配列を格納するときです。

    function ApplyUserConfiguration(Data) {

    if (window.localStorage) {  
        var UserDBx = localStorage.getObject('UserDataBase');
        console.log("User Configuraiton found");
        console.log(UserDBx);
        console.log("ActualGetObject");
        console.log(localStorage.getObject('UserDataBase'));
        console.log(UserDBx.length);
        for (var i = 0; i < Data.length; i++){
            for (var j=0; j< 5; j++){
                if(Data[i].uid == UserDBx[j].uid){
                    Data[i].userenable = UserDBx[j].userenable;
                    Data[i].Color = UserDBx[j].color;
                    delete UserDBx[j];
                    break;
                }
            }
        }
    }
    return Data;
};

console.log(localStorage.getObject('UserDataBase')); オブジェクト配列を正しく返しますが、console.log(UserDBx); 最初の要素が「未定義」のオブジェクト配列を返します。なぜこれが起こるのか分かりますか?

4

1 に答える 1