2016-01-23 75 views
0

我正在编程一个聊天系统。打开新聊天时,我总是创建一个LocalStorage变量。创建这样的:Javascript搜索,如果LocalStorage变量存在

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

现在我想检查我有多少人有这样类似: “聊天_” + ...计数。 我该怎么做?

+0

是否还有其他的'localStorage'?如果没有,那么只需检查'.length'属性 – Andreas

回答

1

你会抢localStorage对象的键阵列,并使用Array.filter唯一的项目开始与“chat_”抢:

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

这里有一个JSFiddle

0

尝试这样的事情,循环浏览localStorage中的所有项目并与您的图案匹配

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

本地存储基于关键值对。 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. 

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

编辑:有可能找到某个前缀的属性,如在这个问题的答案中看到的。

0

我会提供转换为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