将属性添加到已存储在localStorage中的对象

时间:2011-05-18 22:41:53

标签: html5 object properties local-storage

我在localStorage中有一个对象,例如:

{ “一个”: “oneone”, “二”: “twotwo”}

你明白了。

由于某些原因,尝试向对象添加更多项目将无法正常工作。如果我想添加“三个”:“threethree”,它会忽略它,当我更新Opera Dragonfly中的存储区时,它会显示相同的旧对象,不变...

有人知道如何动态附加到物体上吗?或者我是否必须在代码中附加对象的副本,然后从localStorage中清除旧对象,并存储更新的对象?我可以看到这是唯一的方法,但似乎它可能有点难看......想法请! :d

2 个答案:

答案 0 :(得分:0)

我认为最安全和最干净的方法是从localStorage获取对象,解析它,添加一些数据并将其字符串化以便存储。

就像你说的那样,它有点难看,但你可以创建一个函数来做到这一点

function mergeLocalStorage(key, obj){
    var newObj = JSON.parse(localStorage.getItem(key));
    for (var k in obj){
        newObj[k] = obj[k];
    }
    localStorage.setItem(key, JSON.stringify(newObj));
    return newObj;
}

答案 1 :(得分:0)

如果这个对象要达到任何显着的大小,那么在每次微小的改变时不断地解析和重新串行它将变得效率低下。更好的方法是使用http://rhaboo.org在localStorage中存储大型嵌套对象,但为每个终端值使用单独的localStorage条目。所有的魔法都隐藏在这样的语法之下:

var store = Rhaboo.persistent('Some name');
store.write('count', store.count ? store.count+1 : 1);

store.write('somethingfancy', {
  one: ['man', 'went'],
  2: 'mow',
  went: [  2, { mow: ['a', 'meadow' ] }, {}  ]
});  
store.somethingfancy.went[1].mow.write(1, 'lawn');
console.log( store.somethingfancy.went[1].mow[1] ); //says lawn

BTW,我写了。