4

如何过滤具有特定搜索词的数组?例如——我们有一个数组 [Tom Harry,Tom John,John Glen,Tom Harward] 当我们搜索“Tom H”时,应该只有 Tom Harry 和 Tom Harward 作为输出 [Tom Harward,Tom Harry];使用 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;
    }
}
4

5 回答 5

7

如果您正在使用支持 JavaScript 1.6 的浏览器,Array.filter是您的选择。您的问题可以通过以下单行来解决(当然您可以通过引入带search_pattern参数的函数来概括它):

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

如果您希望它也适用于 IE8 或更低版本的旧浏览器,您可以轻松实现filter(上面的链接包含实现)。顺便说一句,建议使用提供许多集合操作功能的下划线库,包括filter.

于 2013-01-01T08:45:52.663 回答
2

ES6 实现,带有箭头函数startsWith

['Tom Harry','Tom John','John Glen','Tom Harward'].filter(name => name.startsWith('Tom H'));
于 2019-09-18T14:19:05.067 回答
1

您可以在 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]); 
    }
}

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

于 2013-01-01T08:33:34.107 回答
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>

使用这个伙伴

于 2013-01-01T08:36:34.517 回答
0

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

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

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

s.indexOf("Tom H") 

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

于 2013-01-01T08:22:05.387 回答