我有一个字符串数组。我需要找到以键开头的所有字符串。 例如:如果有一个数组['apple','ape','open','soap']
当用键'ap'搜索时 我应该只得到'苹果'和'猿'而不是'肥皂'。从javascript数组中查找匹配字符串
这是javascript。
我有一个字符串数组。我需要找到以键开头的所有字符串。 例如:如果有一个数组['apple','ape','open','soap']
当用键'ap'搜索时 我应该只得到'苹果'和'猿'而不是'肥皂'。从javascript数组中查找匹配字符串
这是javascript。
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;
}
作为@安妮建议使用indexOf。 indexOf用于查找给定字符串内的子字符串。如果不匹配,则返回-1
,否则返回第一个匹配的起始索引。如果该索引是0
,则表示该比赛是在开始阶段。
另一种方法是使用regular expressions。使用^
字符从字符串的开头进行匹配。正则表达式:
/^he/
将匹配以"he"
开头的所有字符串,如“你好”,“听”,“氦”等,为正则表达式的test
方法返回指示是否一个布尔值没有成功的比赛。上述正则表达式可以测试为/^he/.test("helix")
,这将返回true,而/^he/.test("sheet")
不会像"he"
不会出现在开头。
循环输入数组中的每个字符串,并收集新数组中匹配的所有字符串(使用indexOf或regex)。这个新数组应该包含你想要的。
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;
}
您可以使用过滤器,正则表达式来实现这一点:
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)
仅供参考,在的indexOf IE8失败的方法;我也正要使用它:(:(是的,我必须支持较旧的IE,并希望我没有) – mkralla11 2013-09-03 17:14:11