【问题标题】:Add more array of objects into a localstorage key将更多对象数组添加到本地存储键中
【发布时间】:2012-12-11 04:34:00
【问题描述】:

我有一个本地存储密钥“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"
  }])
}

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

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

【问题讨论】:

  • 仅供参考,您可以只测试=== undefined - 无需使用typeof,除非您正在处理可能未定义的变量(例如typeof foo == 'undefined',因为foo === undefined 在这种情况下会中断)
  • 您意识到,JSON 是一种用于交换 javascript 数据的字符串格式。您是在谈论实际的 JSON 字符串吗?或者关于一个 javascript 对象数组?
  • @jfriend00 更改了标题。我在谈论一个 javascript 对象数组

标签: jquery arrays json local-storage


【解决方案1】:

使用每个 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 相互转换

编辑:如果您更喜欢保持数组格式,您可以添加一个新元素,如下所示:

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

【讨论】:

  • 我真的看不出你的答案和我目前使用的解决方案有什么区别。我试图避免您需要为每个键设置值的最后一个代码位,因为如果例如我在一行上有 30 个不同的 id,我将不得不给它们一个值。我正在尝试做类似的事情:获取当前完整的密钥,因为它的 id 和值,并添加 1 个额外的
  • OK .. 使用 push() 向数组添加一个很容易,这是 javascript 数组方法。我的想法是当您需要通过 ID 访问特定信息时。在数组中,您必须遍历整个数组以查找具有所需 ID 的对象...或知道它的索引位置
  • 我有点意识到关于数组方法的推送,但我不确定如何将它传递到本地存储密钥 st。给我一秒钟
  • 因为如果我将密钥检索为 var st = localStorage.getItem("st");那我就进不去了
  • 使用 var st=JSON.parse(localStorage.getItem("st")) 从存储中创建 javascript 对象/数组,然后 JSON.stringify 将其放回
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多