我有一个localstorage键'st
',其值为:
[{"id":"es","state":"5hwrte5"},{"id":"bs","state":"dakiei3"}]
我想在最后添加一个keyvalue(如果它不存在),最后得到:
[{"id":"es","state":"5hwrte5"},{"id":"xs","state":"dakiei3"},{"id":"NEWKEY","state":"off"}]
所以我尝试的是:
if (typeof getstate(json, 'NEWKEY') == "undefined"){
localStorage["st"] = JSON.stringify([{
"id": "es",
"state": getstate(json, "es")
}, {
"id": "xs",
"state": getstate(json, "bs")
}, {
"id": "NEWKEY",
"state": "off"
}])
}
getstate
给出了某个特定身份证明的状态。
现在主要的问题是我想保持这些值(因此我需要在当时检索它们)并使用最简单的方法,所以以防我的密钥有30个不同的ID并且我想再添加1个,我没有必要检索所有30个id的值。
答案 0 :(得分:2)
对于使用每个ID作为键而不是对象数组的对象,您似乎会好多了
var st={
"es":{"state":"5hwrte5"},
"xs":{"state":"dakiei3"}
}
然后访问ID的数据:
alert( st.es.state);
添加新属性:
st['newKey']={state:"off"}/* same as writing st.newKey={state:"off"}
/* OR*/
st.newKey={state:"off"}
对象看起来像:
var st={
"es":{"state":"5hwrte5"},
"xs":{"state":"dakiei3"},
newKey :{state:"off"}/* quotes on object keys are optional unless they contain special characters or spaces*/
}
然后,您可以使用JSON.stringify(st)
或JSON.parse( localStorage['st'])
修改:如果您希望保留数组格式,可以添加新元素,如下所示:
var st = [{"id":"es","state":"5hwrte5"},{"id":"bs","state":"dakiei3"}];
st.push( {"id":"NEWKEY","state":"off"})
/* results in */
[{"id":"es","state":"5hwrte5"},{"id":"xs","state":"dakiei3"},{"id":"NEWKEY","state":"off"}]
使用该数组,您必须遍历数组中的每个元素以搜索特定ID
for(i=0 ; i< st.length; i++){
var object= st[i];
if ( object.id=="NEWKEY"){
alert(object.state)
}
}