HTML5本地存储排序

5

我正在使用本地存储来存储用户的输入,并在另一页上显示这些条目。我需要一种根据最近编辑日期和时间对它们进行排序的方法。HTML5有没有这样的功能?如果没有,最简单/最有效的方法是什么?

感谢您的建议。


你是否正在存储JSON编码的对象?你不能在将它们添加到本地存储时加上时间戳吗? - robertc
我没有存储JSON对象。 - intl
另外,我正在寻找一种基于排序系统对它们进行排序的方法。目前我能想到的唯一方法是在本地存储值中实际包含一个时间戳。 - intl
2个回答

5
如果您的键/值具有固有的顺序(按字母顺序、数字顺序等),那么在其中放置时间戳可能是多余的。虽然Storage对象没有排序方法,但您可以创建一个新的Array(),然后对其进行排序。
function SortLocalStorage(){
   if(localStorage.length > 0){
      var localStorageArray = new Array();
      for (i=0;i<localStorage.length;i++){
          localStorageArray[i] = localStorage.key(i)+localStorage.getItem(localStorage.key(i));
      }
   }
   var sortedArray = localStorageArray.sort();
   return sortedArray;
}

这样做的缺点是数组不是关联型的,但这是JavaScript Array对象的本质。上述函数通过将键名嵌入值中来解决这个问题。这样它仍然存在,你用来显示排序后的数组的函数可以将键和值分开处理。

我也需要同样的东西,你的解决方案对我非常有效。谢谢。 - rolinger

2

你需要将时间戳与存储的值配对,可以为每个值创建一个包装对象,并在单个对象中存储值和时间戳。假设你有一个要存储的值myvalue和参考myref:

var d=new Date();
var storageObject = {};
storageObject.value = myvalue;
storageObject.timestamp = d.getTime();
localStorage.setItem(myref, JSON.stringify(storageObject));

在另一页中,您需要将对象重新转换为数组并实现您的compareFunction函数。您的另一个选择是使用Web SQL数据库和Indexed Database API,这使您更自然地存储和查询这种多方面的信息,但您可能需要创建某种抽象包装器才能轻松地跨浏览器工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接