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

Kil*_*ish 24 arrays search jquery

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

var a = ["foo","fool","cool","god"];
Run Code Online (Sandbox Code Playgroud)

如果我想搜索oo,那么它应该返回foo,fool以及cool因为这些字符串包含oo.

ven*_*mus 43

更新

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

黑客风格

let a = ["foo","fool","cool","god"];
var term = 'oo'; // search term (regex pattern)
var search = new RegExp(term , 'i'); // prepare a regex object
let b = a.filter(item => search.test(item));
console.log(b); // ["foo","fool","cool"]
Run Code Online (Sandbox Code Playgroud)

ES6风格(ES2015)

let a = ["foo","fool","cool","god"];
let term = 'oo';
let b = a.filter(item => item.toLowerCase().indexOf(term) > -1);
console.log(b); // ["foo","fool","cool"]
Run Code Online (Sandbox Code Playgroud)

ES5风格

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']
Run Code Online (Sandbox Code Playgroud)


这是过时的答案

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

最快的实现(不区分大小写)在回调中使用LIKE %term%toLowerCase():

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']
Run Code Online (Sandbox Code Playgroud)

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

更灵活但更慢(对小型数组来说足够好)就是使用正则表达式:

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;
});
Run Code Online (Sandbox Code Playgroud)

要么

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

正则表达式允许您使搜索复杂得多jQuery.map().但是,如果您不需要它,请不要使用它,因为它慢了很多倍.

你应该得到一个indexOf匹配元素的数组

  • 应该使用`search = new RegExp(my_var,"gi");`/ oo/gi是`new RegExp("oo","gi")的快捷方式;`但要注意`$ .grep`和`$ .map`不能有额外的参数,所以你的`my_var`必须在全局范围内定义,这不是一个好习惯,但是看不到其他简单的方法 (3认同)