如何在Jquery中搜索数组,如SQL LIKE%value%statement

时间:2011-03-16 11:49:52

标签: jquery arrays search

我有一个带有一些值的数组。如何使用jquery搜索该数组以获得与其匹配或接近的值?

var a = ["foo","fool","cool","god"];

如果我要搜索oo,则应返回foofoolcool,因为这些字符串包含oo

8 个答案:

答案 0 :(得分:34)

<强>更新

要使用Vanilla js在数组中搜索,我会使用在Array原型中实现的filter()方法

黑客风格

let a = ["foo","fool","cool","god"];
let b = a.filter(item => item.indexOf('oo') > -1);
console.log(b); // ["foo","fool","cool"]

ES6风格(ES2015)

const fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];

const filterItems = (needle, heystack) => {
  let query = needle.toLowerCase();
  return heystack.filter(item => item.toLowerCase().indexOf(query) >= 0);
}

console.log(filterItems('ap', fruits)); // ['apple', 'grapes']
console.log(filterItems('ang', fruits)); // ['mango', 'orange']

ES5风格

var fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];

function filterItems(needle, heystack) {
  var query = needle.toLowerCase();
  return heystack.filter(function(item) {
      return item.toLowerCase().indexOf(query) >= 0;
  })
}

console.log(filterItems('ap', fruits)); // ['apple', 'grapes']
console.log(filterItems('ang', fruits)); // ['mango', 'orange']

注意:对于非常大的数组,您可能需要考虑将这些数组重构为async / await函数


  

这是过时的答案

     

要使用jQuery在数组中搜索,您可以使用jQuery.grep()或   jQuery.map()。两者都使用a返回带有过滤元素的新数组   回调函数。

     

最快的实现(不区分大小写)正在使用indexOf和   回调中的toUpperCase

var search_term = 'oo'; // your search term as string
var search = search_term.toUpperCase();
var array = jQuery.grep(a, function(value) {
    return value.toUpperCase().indexOf(search) >= 0;
});
     

如果您不需要不区分大小写的搜索,则可以删除.toUpperCase()以进一步加快速度。

     

使用更灵活但更慢(对小阵列来说足够好)   正则表达式:

var search_term = "oo"; // search term
var search = new RegExp(search_term , "i");
var arr = jQuery.grep(a, function (value) {
    return search.test(value);
});
     

var search_term = "oo"; // search term
var search = new RegExp(search_term , "i");
var arr = jQuery.map(a, function (value) {
    return value.match(search) ? value : null;
});
     

正则表达式允许您使搜索比%value%复杂得多。但是如果你不需要它,请不要使用它,因为它是   慢了很多次。

     

你应该得到一个带有匹配元素的数组arr

答案 1 :(得分:3)

function find(arr) {
    var result = [];

    for (var i in arr) {
        if (arr[i].match(/oo/)) {
            result.push(arr[i]);
        }
    }

    return result;
}

window.onload = function() {
    console.log(find(['foo', 'fool', 'cool', 'god']));
};

打印["foo", "fool", "cool"]

答案 2 :(得分:2)

尝试以下js代码

function likeMatch(q)
{
    my_arr = ["foo","fool","cool","god"];
    var rArr=[];

    for(var t in my_arr)
    {
      if(my_arr[t].indexOf(q)>0)   
      rArr.push(my_arr[t]);
    }
  return(rArr);
}

答案 3 :(得分:1)

试试这个:

var infoData = ["foo","fool","cool","god"], 
search   = 'oo';

//this makes the magic
infoData = $$(infoData).filter(function(){
        return (this.search(search) >= 0)
    })  

var n = infoData.length;
    console.log("size result: "+ n );

for(var item = 0; item < n ;item++){
    console.log("item: "+item+" data : "+infoData[item]);       
}

结果:

size result: 3

item: 0 data : foo
item: 1 data : fool
item: 2 data : cool 

答案 4 :(得分:0)

尝试$.inArray http://api.jquery.com/jQuery.inArray/。我不确定它是否允许你使用正则表达式,但值得一试

答案 5 :(得分:0)

您可以使用Alasql JavaScript SQL库执行此操作。 它支持LIKE运算符,就像在SQL

中一样
var a = ["foo","fool","cool","god"];
var searchString = "%oo%";

var res = alasql('SELECT COLUMN * FROM [?] WHERE [0] LIKE ?',[a, searchString]);

在jfFiddle尝试this example

答案 6 :(得分:0)

如果要在包含哈希对象的数组中搜索

,请使用以下函数
 function searchInArrayofHashes(array,key,keyword) {
  responsearr = []
  for(i=0;i<array.length;i++) {
      if(array[i][key].indexOf(keyword) > -1 ) {
        responsearr.push(array[i])
    }
  }
  return responsearr
}

答案 7 :(得分:0)

如果要匹配任何正则表达式,可以在数组上使用find方法:

Array.find(x => /^left:/.test(x)