说我们有:
localStorage.setItem("key1", "value1");
localStorage.setItem("key2", "value2");
localStorage.setItem("key3", "value3");
localStorage.setItem("key4", "value4");
localStorage.setItem("key5", "value5"); // the last one
有没有办法获得最后一个存储的项目,而不知道它的密钥?因此,我们不知道其密钥是key5
还是key10
还是fbjfbjfkbjkf
。我们只想得到这个项目。
喜欢什么?
localStorage.getLastStoredItem();
答案 0 :(得分:4)
localStorage
没有存储项目顺序的确切概念(它是实现定义的),它应该用作键值存储。
最简单的解决方案是以某种方式存储输入的最后一个密钥。例如,您可以创建一个存储项目的包装函数,并更新最后一个键:
var lastKey; // somewhere in your code, in the outer scope of `add()` and `getLast()`
// ...
function add(key, value) {
lastKey = key;
localStorage.setItem(key, value);
}
function getLast() {
return localStorage.getItem(lastKey);
}
也许您可以为存储目的制作一个对象来跟踪所有这些。您还可以通过闭包将lastKey
封装为私有变量,这样您就不会意外地更改它:
var MyStorage = {};
(function(s) {
var lastKey;
s.add = function(key, value) { /* ... */ };
s.getLast = function() { /* ... */ }
})(MyStorage);
现在只有MyStorage.add()
和MyStorage.getLast()
才能访问lastKey
。此外,如果您使用MyStorage
之类的包装器对象,则可以在内部将商店更改为sessionStorage
,而不会影响使用MyStorage
的任何代码
修改强>
正如 user2181397 和 nnnnnn 的评论中所述,如果您希望通过应用程序重新启动来保留lastKey
的值,您还可以将其存储在localStorage
(或sessionStorage
,具体取决于您的应用逻辑):
var lastKey = localStorage.getItem('lastKey');
或者在对象中:
var MyStorage = {};
(function(s) {
var lastKey = localStorage.getItem('lastKey');
s.add = function(key, value) { /* ... */ };
s.getLast = function() { /* ... */ }
})(MyStorage);
EDIT2:
有点像?
localStorage.getLastStoredItem;
另一种方法是通过覆盖localStorage
方法而不是创建Storage.prototype
对象,将上述方法直接添加到MyStorage
:
(function(s) {
var lastKey = localStorage.getItem('lastKey');
var _setItem = Storage.prototype.setItem; // remember the original setItem
Storage.prototype.setItem = function(key, value) { // define the new setItem
if (this === window.localStorage) { // make sure we are calling localStorage's methods
lastKey = key; // remember the last key
}
_setItem.apply(this, arguments); // call the original setItem
}
Storage.prototype.getLast = function() { // create the necessary custom method to get the last item stored
if (this === window.localStorage) { // make sure we are calling localStorage's methods
return this.getItem.call(this, lastKey);
}
}
})();
用法:
localStorage.setItem('key1', 'val1');
console.log(localStorage.getLast()); // logs 'val1'
注意:由于我们正在修改Storage.prototype
,因此将此功能扩展到其他Storage
API方法只需删除if (this === localStorage)
或添加其他条件它。