按搜索查询进行数组筛选

Array filtering by search query

本文关键字:数组 筛选 搜索 查询      更新时间:2023-09-26

如何筛选具有特定搜索项的数组?例如,我们有一个数组[Tom Harry,Tom John,John Glen,Tom Harward]当我们搜索"Tom H"时,只有Tom Harry和Tom Harward应该作为输出[汤姆·哈沃德,汤姆·哈利];使用Javascript

var k=0;
filter=[];
var fc=input.charAt(0);
var sc=input.charAt(1);
for(var i=0;i<array.length;i++)
{
    if(array[i].charAt(0)===fc)
    {
        if(array[i].charAt(1)===sc || sc.charAt(1)=="" )
        {       
            filter[k]=[];
            filter[k]=array[i];
            filter[k]=array[i];
            k++;    
        }
        else
        {
            continue;
        }
    }
    else
    {
        continue;
    }
}

如果您正在使用支持JavaScript1.6的浏览器,则可以选择Array.filter。您的问题可以通过以下一行来解决(当然,您可以通过引入带有search_pattern参数的函数来推广它(:

['Tom Harry','Tom John','John Glen','Tom Harward'].filter(function(name){return name.match(/Tom H/);});

如果您希望它也能在IE8或更低版本的旧浏览器上工作,那么自己实现filter很容易(上面的链接包含一个实现(。顺便说一句,建议使用下划线库,它提供了包括filter在内的许多集合操作功能。

ES6实现,带有箭头功能并启动with:

['Tom Harry','Tom John','John Glen','Tom Harward'].filter(name => name.startsWith('Tom H'));

您可以在for循环中使用search((方法。

search((方法的信息:http://www.w3schools.com/jsref/jsref_search.asp

示例:

for(var i=0; i < nameOfArray.length; i++){
    if(nameOfArray[i].search('Tom H') > -1){
       resultArray.push(nameOfArray[i]); 
    }
}

此代码将循环遍历数组中的每个元素,如果您输入的文本与您键入的文本部分匹配(通过搜索方法(,它将把数组中的项推送到结果数组中。这应该创建一个具有所有匹配结果的数组。

您可以检查String.match((或String.indexOf((方法。

var s="Tom Harry"
 if (s.match(/Tom H.*/)) {
  // do something
}

或者你可以使用indexof((,就像一样

s.indexOf("Tom H") 

然后检查索引。如果它>=0,则它包含该字符串。

 <script type="text/javascript">
  var src1= ["Tom Harry","Tom John","John Glen","Tom Harward"];
alert(searchStringInArray (src1,'Tom H') );

function searchStringInArray (src1,searched) 
{
  var res=""
  for (var j=0; j<src1.length; j++) {
    if (src1[j].match (searched)) 
    {
    res=res+src1[j]+","
    }
}
return res;
} 
</script>

使用此配对