【问题标题】:Maintaining an ordered list with localStorage?使用 localStorage 维护有序列表?
【发布时间】:2012-01-04 23:03:42
【问题描述】:

假设我的存储是这样的:

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

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

1 - turkey
2 - beef
3 - fish

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

1 - fish
2 - turkey
3 - beef

最好的方法是什么?

【问题讨论】:

    标签: java html gwt local-storage


    【解决方案1】:

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

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

    这将为火鸡提供 0 的起始值,您可以手动将索引设置为 1 用于火鸡,2 用于鸡肉等。

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

    list.splice(1); //removes chicken
    

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

    【讨论】:

    • LocalStorage 不应通过设置 localstorage 对象的属性来使用。 The API 定义了 getItem(key)setItem(key, value)removeItem(key) 用于操作键/值对的函数。键和值都必须是字符串。
    【解决方案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"));
    }
    

    【讨论】:

    • JsArrayString jas = JsonUtils.safeEval(json);代替JSONParser.parseString/isArray/getJavaScriptObject;更易于阅读且更便宜(无需检查结果类型并创建 JSONArray 包装器)。
    猜你喜欢
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多