使用JSON.parse时,Object Array的第一个元素作为undefined传递

时间:2012-11-03 02:26:26

标签: arrays object undefined

我正在使用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, “颜色”: “528800”},{ “UID”: “氧化镉”, “组名”: “CKHO”, “calendarid”: “apkrty45sdfer44fd1mr55dfghfg8@group.calendar.google.com”, “链接”:空,“userenable “:真,” 颜色 “:” 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);返回对象数组,第一个元素为“undefined”。知道为什么会这样吗?

1 个答案:

答案 0 :(得分: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);
}