我在localStorage中有一个对象,例如:
{ “一个”: “oneone”, “二”: “twotwo”}
你明白了。
由于某些原因,尝试向对象添加更多项目将无法正常工作。如果我想添加“三个”:“threethree”,它会忽略它,当我更新Opera Dragonfly中的存储区时,它会显示相同的旧对象,不变...
有人知道如何动态附加到物体上吗?或者我是否必须在代码中附加对象的副本,然后从localStorage中清除旧对象,并存储更新的对象?我可以看到这是唯一的方法,但似乎它可能有点难看......想法请! :d
答案 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,我写了。