3

我有一个具有值的本地存储键“ st”:

[{"id":"es","state":"5hwrte5"},{"id":"bs","state":"dakiei3"}]

如果它不存在,我想在最后添加一个键值,最终得到:

[{"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"
  }])
}

Wheregetstate为我提供了某个特定 ID 的状态。

现在主要问题是我想保持这些值不变(所以我需要在当时检索它们)并使用最简单的方法,所以如果我的密钥有 30 个不同的 id 而我想再添加 1 个,我没有必须检索所有 30 个 id 的值。

4

1 回答 1

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 进行转换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)
    }
}
于 2012-12-25T00:32:26.443 回答