2011-10-24 89 views
2

有没有一种方法可以通过基于关键字的javascript或JQuery中的localStorage进行循环,而不是循环遍历所有localStorage?我知道我可以做通过localStorage循环包含关键字

for (var i = 0; i < localStorage.length; i++)... 

但我宁愿做这样的事情

$.each('localStorage:contains("keyword")')... 
+0

你的意思是关键或值应该包含“关键字”? – pimvdb

+0

关键字应该包含在密钥中。 – jmease

+0

我想我对这个[问题] [1]的回答可能是你要找的。 [1]:http://stackoverflow.com/q/8265078/1054225 – Dallas

回答

2

这不是直接可以使用DOM选择仿制的对象。

你可以,但是,创建一个小功能可以过滤为每一个传递函数:

Object.filter = function(obj, func) { 
    var res = {}; 

    for(var key in obj) { 
     // filter out own properties (not length) that pass the filter function 
     if(obj.hasOwnProperty(key) && key !== "length" && func(key, obj[key])) { 
      res[key] = obj[key]; 
     } 
    }; 

    return res; 
}; 

然后,你可以这样做:

var filtered = Object.filter(localStorage, function(i, v) { 
               // Simply speaking, '~' is the 
               // same as checking for '!== -1' 
               return ~i.indexOf("keyword"); 
              }); 
$.each(filtered, function(i, v) { 
    // ... 
}); 

使用这种通用的功能,你可以建立更方便的功能如:

Object.keyContains = function(obj, contains) { 
    return Object.filter(obj, function(i, v) { 
     return ~i.indexOf(contains); 
    }); 
}; 

然后重复localStorage你想要的方式是一样容易:

$.each(Object.keyContains(localStorage, "keyword"), function(i, v) { 
    // ... 
}); 
+0

这个技巧。很长的路要走,以避免一个For循环。 :) 非常感谢! – jmease

0

jQuery有一个InArray()方法,我想这就是你要找的 -

JQuery inArray

在你的情况下,你可能需要这样的东西...

var index = jQuery.inArray(“keyword”,localStorage);

//你从需要使用localStorage的[指数]什么这里

+1

'localStorage'不是数组,因为它有自定义键/值,而不是基于零的钥匙索引。 – pimvdb

+0

仍然不是一个循环。可能有多个localStorage项目包含关键字 – jmease