如何使用特定搜索词过滤数组? 例如 - 我们有一个数组 [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;
}
}
答案 0 :(得分:4)
如果您正在使用支持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
。
答案 1 :(得分:1)
你可以在for循环中使用search()方法。
示例:
for(var i=0; i < nameOfArray.length; i++){
if(nameOfArray[i].search('Tom H') > -1){
resultArray.push(nameOfArray[i]);
}
}
此代码将循环遍历数组中的每个元素,如果您输入的文本与您键入的内容(通过搜索方法)匹配,则会将项目从数组推送到结果数组中。这应该创建一个具有所有匹配结果的数组。
答案 2 :(得分:0)
您可以检查String.match()或String.indexOf()方法。
var s="Tom Harry"
if (s.match(/Tom H.*/)) {
// do something
}
或者您可以使用indexof(),就像
一样s.indexOf("Tom H")
然后检查索引。如果它&gt; => 0,则它包含该字符串。
答案 3 :(得分: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>
使用此配偶
答案 4 :(得分:0)
使用arrow function和startsWith的ES6实现:
['Tom Harry','Tom John','John Glen','Tom Harward'].filter(name => name.startsWith('Tom H'));