将更多对象添加到localstorage键中

时间:2012-12-25 00:13:50

标签: jquery arrays json local-storage

我有一个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的值。

1 个答案:

答案 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'])

将整个对象转换为JSON和从JSON转换

修改:如果您希望保留数组格式,可以添加新元素,如下所示:

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)
    }
}