搜索 JSON 数组

Search Json Array

本文关键字:数组 JSON 搜索      更新时间:2023-09-26

我得到了如下所示的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":""}
]

我想在这个 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.
});

结果:

[
    {"value":"uk-icon-adjust","title":"Adjust","url":"#","text":""},
    {"value":"uk-icon-adn","title":"Adn","url":"#","text":""}
]

如果您只需要一个标题数组,则可以映射结果,如下所示:

var titles = result.map(function(e){
    return e.title;
});

标题:

["Adjust", "Adn"]

为了提高效率,您需要过滤数组后执行此映射。这样,您只需循环访问筛选结果,而不是先迭代所有项目以获取标题,然后再次迭代所有项目以筛选它们。

当然,这可以与过滤相结合:

var result = array.filter(function(e){
    return searchRegExp.test(e.title);
}).map(function(e){
    return e.title;
});

请记住,IE 8 或更低版本不支持两种Array.prototype.filter() Array.prototype.map()。但是,我链接到的页面确实有一些 polyfill,以使这些功能在旧版本的 IE 中工作。

这是一个原生对象。不过,您可以通过这种方式做到这一点,首先使用 Array.map 创建一个标题数组,然后使用 Array.filter

var titles = obj.filter(function(o){
   return /^ad/i.test(o.title);
}).map(function(o){ return o.title; });

Amit Joki的答案就是答案。
如果你不想使用 map(),你也可以尝试:

var 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":""}
];
function search(array, re) {
    var regexp = new RegExp(re, 'gi');
    for (var i = 0; i < array.length; i++) {
        return array[i].title.match(regexp);
    }
    throw "Couldn't find object like " + re;
}
console.info(search(json, 'ad'));