搜索Json数组

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函数.

一些想法?

Cer*_*rus 5

试试这个:

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中使用.