2010-06-19 30 views
10

我有一个字符串数组。我需要找到以键开头的所有字符串。 例如:如果有一个数组['apple','ape','open','soap'] 当用键'ap'搜索时 我应该只得到'苹果'和'猿'而不是'肥皂'。从javascript数组中查找匹配字符串

这是javascript。

回答

9
function find(key, array) { 
    // The variable results needs var in this case (without 'var' a global variable is created) 
    var results = []; 
    for (var i = 0; i < array.length; i++) { 
    if (array[i].indexOf(key) == 0) { 
     results.push(array[i]); 
    } 
    } 
    return results; 
} 
+1

仅供参考,在的indexOf IE8失败的方法;我也正要使用它:(:(是的,我必须支持较旧的IE,并希望我没有) – mkralla11 2013-09-03 17:14:11

15

作为@安妮建议使用indexOf。 indexOf用于查找给定字符串内的子字符串。如果不匹配,则返回-1,否则返回第一个匹配的起始索引。如果该索引是0,则表示该比赛是在开始阶段。

另一种方法是使用regular expressions。使用^字符从字符串的开头进行匹配。正则表达式:

/^he/

将匹配以"he"开头的所有字符串,如“你好”,“听”,“氦”等,为正则表达式的test方法返回指示是否一个布尔值没有成功的比赛。上述正则表达式可以测试为/^he/.test("helix"),这将返回true,而/^he/.test("sheet")不会像"he"不会出现在开头。

循环输入数组中的每个字符串,并收集新数组中匹配的所有字符串(使用indexOf或regex)。这个新数组应该包含你想要的。

1

With 2 改进,可以找到是否包含,不仅是第一个字符,它有第三个参数来定义返回的值:true表示只返回数组内的元素数(索引/键),假或任何不被接受或没有值意味着返回完整的字符串数组[element],并且如果设置为'position = 3',则返回包含字符串的数组的值,正好在'after = number'位置,这里是3!


function find(key, array, returnindex) 
{ 
var results = []; 
if {returnindex.indexOf('position=') == 0} 
{ 
    var a = parseInt(returnindex.replace('position=','')); 
    returnindex = false; 
} 
else if (returnindex != true) 
{ 
    returnindex = false; 
} 
for (var i = 0; i < array.length; i++) 
{ 
    var j = '-'+array[i].indexOf(key); 
    if (typeof a == 'undefined') 
    { 
     if (i > 0) 
     { 
      j = 'ok'; 
     } 
    } 
    else 
    { 
     if (i == a+1) 
     { 
      j = 'ok'; 
     } 
    } 
    if (j == 'ok' && returnindex) 
    { 
     results.push(i); 
    } 
    else 
    { 
     results.push(array[i]); 
    } 
} 
return results; 
} 
-1

您可以使用过滤器,正则表达式来实现这一点:

function startsWith(array, key) { 
 
    const matcher = new RegExp(`^${key}`, 'g'); 
 
    return array.filter(word => word.match(matcher)); 
 
} 
 

 
const words = ['apple','ape','open','soap'] 
 

 
const key = 'ap' 
 

 
const result = startsWith(words, key)

相关问题