Javascript 搜索 LocalStorage 变量是否存在



我正在编写一个聊天系统。我总是在打开新聊天时创建一个本地存储变量。像这样创建:

localStorage.setItem("chat_"+varemail, data);

现在我想检查我有多少个,如下所示:"chat_"+...计数。我该怎么做?

您将获取localStorage对象的键数组,并使用 Array.filter 仅获取以"chat_"开头的项目:

var length = Object.keys(localStorage).filter(function(key) {
    return /^chat_.+/.test(key);
}).length;

这是一个JSFiddle

尝试这样的事情,遍历localStorage中的所有项目并与您的模式匹配

function getChatCount(){
    var chatCount = 0;
    for(item in localStorage){
       if(item.indexOf('chat_') > -1) chatCount++;
    }
    return chatCount;
}

本地存储基于键、值对。AFAIK,您将无法检索具有特定前缀的所有值。

一种可能的解决方案是存储包含这些内容的对象。根据您的需要,您可以将对象存储在数组或对象中,然后检索整个集合并查找计数。

例如:

var chats = { count: 0 };
chats["chat_"+varemail] = data;
chats.count += 1;
localStorage.setItem('chats', data);

然后,如果你想要一个计数,你将检索该对象:

var chats = localStorage.getItem('chats');
//chats.count would give you the count.

虽然,这意味着您必须在添加或删除数据时手动维护计数变量。如果您不需要索引功能,则可以将聊天添加到数组中并存储该数组。

编辑:可以找到具有特定前缀的属性,如此问题的答案所示。

我会提供转换为localStorage.setItem("chat", JSON.stringify(stack)),其中stack是聊天对象的数组。通过这种方式,您可以访问一系列聊天,您可以在其中进行计数,搜索等。

像这样:

var chatStore =
    {
        Count: function () {
            var stack = JSON.parse(localStorage.getItem("chats"));
            if (!stack)
                return 0;
            return stack.length;
        },
        Peek: function () {
            var stack = JSON.parse(localStorage.getItem("chats"));
            if (!stack)
                stack = [];
            if (stack.length > 0)
                return stack.pop();
        },
        Push: function (token) {
            var stack = JSON.parse(localStorage.getItem("chats"));
            if (!stack)
                stack = [];
            stack.push(token);
            localStorage.setItem("chats", JSON.stringify(stack));
        },
        // more methods to you might wish to implement: search, insert, etc.
    }
// usage:
chatStore.Push(chatObject); // sets the last chat
chatStore.Peek(); // gets the last chat

最新更新