我正在编程一个聊天系统。打开新聊天时,我总是创建一个LocalStorage变量。创建这样的:Javascript搜索,如果LocalStorage变量存在
localStorage.setItem("chat_"+varemail, data);
现在我想检查我有多少人有这样类似: “聊天_” + ...计数。 我该怎么做?
我正在编程一个聊天系统。打开新聊天时,我总是创建一个LocalStorage变量。创建这样的:Javascript搜索,如果LocalStorage变量存在
localStorage.setItem("chat_"+varemail, data);
现在我想检查我有多少人有这样类似: “聊天_” + ...计数。 我该怎么做?
你会抢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
是否还有其他的'localStorage'?如果没有,那么只需检查'.length'属性 – Andreas