我正在编写一个聊天系统。我总是在打开新聊天时创建一个本地存储变量。像这样创建:
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