Sme*_*ven 2 javascript regex arrays json
我有一个像下面这样的json数组:
[
{"value":"uk-icon-adjust","title":"Adjust","url":"#", "text":""},
{"value":"uk-icon-adn","title":"Adn","url":"#", "text":""},
{"value":"uk-icon-align-center","title":"Align center","url":"#", "text":""},
{"value":"uk-icon-align-justify","title":"Align justify","url":"#", "text":""},
{"value":"uk-icon-align-left","title":"Align left","url":"#", "text":""}
]
Run Code Online (Sandbox Code Playgroud)
我想在这个json数组中搜索特定的标题.但问题是,我想用正则表达式进行搜索.例如:sb搜索"ad" - >该函数应该返回前两个json字符串(Adjust和Adn).
我不知道,现在要设置一个可以实现此目的的javascript函数.
一些想法?
试试这个:
var array = [
{"value":"uk-icon-adjust","title":"Adjust","url":"#", "text":""},
{"value":"uk-icon-adn","title":"Adn","url":"#", "text":""},
{"value":"uk-icon-align-center","title":"Align center","url":"#", "text":""},
{"value":"uk-icon-align-justify","title":"Align justify","url":"#", "text":""},
{"value":"uk-icon-align-left","title":"Align left","url":"#", "text":""}
],
searchString = 'ad',
searchRegExp = new RegExp(searchString , 'i'); // 'i' makes the RegExp ignore case
var result = array.filter(function(e){ // Filter out any items that don't pass the
return searchRegExp.test(e.title); // RegExp test.
});
Run Code Online (Sandbox Code Playgroud)
结果:
[
{"value":"uk-icon-adjust","title":"Adjust","url":"#","text":""},
{"value":"uk-icon-adn","title":"Adn","url":"#","text":""}
]
Run Code Online (Sandbox Code Playgroud)
如果您只需要一组标题,则可以映射结果,如下所示:
var titles = result.map(function(e){
return e.title;
});
Run Code Online (Sandbox Code Playgroud)
标题:
["Adjust", "Adn"]
Run Code Online (Sandbox Code Playgroud)
为了提高效率,您需要在过滤数组后执行此映射.这样,你只有在遍历过滤结果,而不是第一个迭代的所有物品拿到冠军,然后再遍历所有的人再次过滤.
当然,这可以与过滤相结合:
var result = array.filter(function(e){
return searchRegExp.test(e.title);
}).map(function(e){
return e.title;
});
Run Code Online (Sandbox Code Playgroud)
请记住,无论Array.prototype.filter()是Array.prototype.map()是不是在IE 8或更低的支持.但是,我链接的页面确实有一些polyfill,使这些功能可以在旧版本的IE中使用.
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |