3

次の値を持つ localstorage キー ' st' があります。

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

キー値が存在しない場合は、最後にもう 1 つ追加したいので、次のようになります。

[{"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特定の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 に答える