获取最后存储的localStorage项

时间:2016-01-18 04:23:36

标签: javascript local-storage

说我们有:

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();

1 个答案:

答案 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);
}

Here's a sample Fiddle

也许您可以为存储目的制作一个对象来跟踪所有这些。您还可以通过闭包将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'

Here's a sample Fiddle

注意:由于我们正在修改Storage.prototype,因此将此功能扩展到其他Storage API方法只需删除if (this === localStorage)或添加其他条件它。