将值连接到对象属性的末尾?

时间:2014-02-06 14:04:34

标签: javascript jquery json object concatenation

我正在使用localStorage保存用户首选项,如下所示:

 choicesObject = {          //put values in an object
    "measure1"      : $("#m1").is(':checked'),
    "measure2"      : $("#m2").is(':checked'),
    "measure3"      : $("#m3").is(':checked'),
    "measure4"      : $("#m4").is(':checked'),
    "measure5"      : $("#m5").is(':checked'),
    "measure6"      : $("#m6").is(':checked'),
    "measure7"      : $("#m7").is(':checked'),
    "measure8"      : $("#m8").is(':checked')
}
localStorage.setItem("choices", JSON.stringify(choicesObject));

然后我就这样把它们拿回来了:

retrieveChoices = localStorage.getItem("choices");
choicesObject = JSON.parse(retrieveChoices);
for(var i = 0;i<9 ;i++){

这个问题是:

    ticked = choicesObject.measure+i;

它只是不起作用,我尝试过使用引号和方括号。

    element = "#m" + i;
    if(ticked==true){
        $(element).prop('checked', true);
    }
    else{
        $(element).prop('checked', false);
    } 
}   

}

我想循环测量属性并恢复复选框元素。

我知道即使我的对象创建也是低效的,我可以使用for循环,但我只是不知道如何在循环时处理对象属性,因为我不知道你怎么做在不破坏物体的情况下做到这一点。

至少可以工作,我可以将数据输入和输出存储在localStorage中的对象,但是这个非常简单的问题让我很难过。

PS。会

choicesObject = localStorage.getItem(JSON.parse("choices"));

是一个更好的速记?在重新阅读我的问题的同时想到这一点。

编辑:谢谢大家。我很快得到了3个正确的答案!惊人。非常感谢。这个网站及其成员每天都让我感到惊讶,并彻底改变了我的编码!

我将选择正确的答案作为我给我解析的新速记的答案,但是你们所有人都给了我需要知道的东西。我现在要去看看我现在能否回答一些菜鸟问题了!

2 个答案:

答案 0 :(得分:1)

使用

ticked = choicesObject["measure"+i];

<小时/> 编辑:你的速记不起作用,改为使用:

choicesObject = JSON.parse(localStorage.getItem("choices"));

答案 1 :(得分:1)

对象就像值的“字典”,因此您可以通过执行myobject.propertyNamemyobject["propertyname"]来访问属性。它们是等价的。

在您的情况下,您只需要用

替换ticked = choicesObject.measure+i;
ticked = choicesObject["measure"+i];

另外,在定义变量时考虑使用var关键字,每次省略它时,都会在窗口对象中创建一个新的全局变量,retrievedChoices和{{1}就是这种情况。 }。您可以在该脚本运行后通过choicesObjectwindow["choicesObject"]或仅window.choicesObject访问它们来确认这一点。