在数组内搜索

时间:2015-07-31 13:34:02

标签: javascript jquery

我正在尝试使用Local Storage为我的应用程序实现自动完成功能。 有没有办法使用' LIKE%value%'来搜索一系列单词。条件?

var autocompleteArr = ['two', 'three', 'twenty two', 'twelve'];
mySearchMethod(autocompleteArr, 'tw'); //['two', 'twenty two', 'twelve']

5 个答案:

答案 0 :(得分:3)

如果您对部分搜索感兴趣filter

function match(value) {
  return value.match(/.*tw.*/);
}
var filtered = ['two', 'three', 'twenty two', 'twelve'].filter(match);
// filtered is ['two', 'twenty two', 'twelve']

如果对完全匹配感兴趣,那么 indexOf 就可以。

答案 1 :(得分:1)

您可以使用indexOf检查字符串是否包含其他字符串。

var autocompleteArr = ['two', 'three', 'twenty two', 'twelve'];

function mySearchMethod(haystack, needle) {

    arr = [];

    for(var i = 0; i < haystack.length; i++) {
        if (haystack[i].indexOf(needle)) {
            arr.push(haystack[i]);
        }
    }

    return arr;
}

答案 2 :(得分:1)

function arrayContains(autocompleteArr, searchString){
  var answerArray = [];
  for(var i = 0; i < autocompleteArr.length; i++){
    if(autocompleteArr[i].indexOf(searchString) != -1){
      answerArray.push(autocompleteArr[i]);
    }
  }
  return answerArray;
}

答案 3 :(得分:1)

您可以将正则表达式与Array.filter

结合使用
var input = ... // get the user input from somewhere
var autocompleteArr = ['two', 'three', 'twenty two', 'twelve'];
var suggestions = autocompleteArr.filter(function(el){
    return new Regexp(input).test(el);
});

如果您想从键入的开头进行匹配,请将此行更改为:

return new Regexp("^"+input).test(el);

答案 4 :(得分:1)

您可能想要做这样的事情

var autocompleteArr = ['two', 'three', 'twenty two', 'twelve'];
var autocomplete = function(word) {
    return autocompleteArr.filter(function(ele) {return ele.match(".*"+word+".*");})
}


autocomplete("tw") // ["two", "twenty two", "twelve"]

http://jsfiddle.net/jkn6xgr7/2/