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

0

我遇到了同样的问题,即在开始时看到未定义的元素。以下是我的代码:

var x;
for (i = 0; i < content.length; i++) {
    x += content[i].name;
console.log(x);
} 

原因是未定义的 x。我在声明它,但我没有给它任何价值。所以我只是将 var x 更改为var x=""并解决了问题。

无错误代码

var x="";
for (i = 0; i < content.length; i++) {
    x += content[i].name;
console.log(x);
} 
于 2018-07-19T10:00:38.283 回答