我有一個字符串數組。我需要找到以鍵開頭的所有字符串。 例如:如果有一個數組['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