使用localStorage维护一个有序列表?

时间:2011-11-23 16:39:33

标签: java html5 gwt local-storage

说我的存储空间如下:

1 - turkey
2 - chicken
3 - beef
4 - fish

如果我删除chicken,我想将其更新为:

1 - turkey
2 - beef
3 - fish

我还需要一种方法来重新订购,所以如果我说fish应该是第一个,我希望它更新为:

1 - fish
2 - turkey
3 - beef

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

使用List界面存储和检索JSON数组并操作列表:

String listToJson(List<String> list) {
  JsArrayString array = (JsArrayString) JsArrayString.createArray();

  for (int i = 0; i < list.size(); i++) {
    array.set(i, list.get(i));
  }

  return new JSONArray(array).toString();
}

List<String> jsonToList(String json) {
  JsArrayString jas = JsonUtils.safeEval(json);
  List<String> list = new ArrayList<String>();

  for (int i = 0; i < jas.length(); i++) {
    list.add(jas.get(i));
  }

  return list;
}

void myEntryPoint() {
  ArrayList myList = new ArrayList();
  myList.add("cake");
  myList.add("pie");
  myList.add("ice cream");

  Storage.getLocalStorageIfSupported().
      setItem("myKey", listToJson(myList));

  // ...

  ArrayList otherList =
      jsonToList(Storage.getLocalStorageIfSupported().
          getItem("myKey"));
}

答案 1 :(得分:0)

我能想到的唯一方法是使用数组。

localstorage.list = [turkey, chicken, beef, fish];

这将为火鸡提供一个起始值0,你可以手动将索引设置为1表示火鸡,2表示鸡肉等。

要删除项目,您需要对该项目进行切片:

list.splice(1); //removes chicken

要进行随机播放,请查看this帖子,这很好地解释了它。

答案 2 :(得分:0)

使用http://rhaboo.org。它是localStorage的糖层,让你可以写下这样的内容:

var store = Rhaboo.persistent("Fridge");

if (store.fridge === undefined) //first run
  store.write('fridge', ['turkey', 'chicken', 'beef', 'fish']);

for (var i=0; i<store.fridge.length; i++) 
  console.log(store.fridge[i]);

store.fridge.unshift(store.fridge.pop()); //fish, turkey, chicken, beef
//This is all persistent - hit reload and see them rotate

它比将整个数组放在单个localStorage条目中效率更高。对于上面的示例,rhaboo将为数组使用5个条目,并在更改内容时单独编辑它们。

BTW,我写了rhaboo。