У меня есть один массив строк. Мне нужно найти все строки, начиная с ключа.
например: если имеется массив ['apple','ape','open','soap']
при поиске с помощью ключа "ap"
я должен получить только "яблоко" и "обезьяна", а не "мыло".
Это в javascript.
У меня есть один массив строк. Мне нужно найти все строки, начиная с ключа.
например: если имеется массив ['apple','ape','open','soap']
при поиске с помощью ключа "ap"
я должен получить только "яблоко" и "обезьяна", а не "мыло".
Это в 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, как предложил @Annie. indexOf используется для нахождения подстрок внутри данной строки. Если нет совпадения, он возвращает -1
, в противном случае он возвращает начальный индекс первого совпадения. Если этот индекс 0
, это означает, что совпадение было в начале.
Другим способом является использование регулярных выражений. Используйте символ ^
для соответствия с началом строки. Регулярное выражение:
/^he/
будет соответствовать всем строкам, начинающимся с "he"
, таких как "привет", "слышать", "гелий" и т.д. test
для RegExp возвращает логическое значение, указывающее, было ли успешное совпадение. Вышеупомянутое регулярное выражение может быть проверено как /^he/.test("helix")
, которое вернет true, а /^he/.test("sheet")
не будет, поскольку "he"
не появляется в начале.
Прокрутите каждую строку во входном массиве и соберите все строки, которые соответствуют (с использованием indexOf или regex) в новом массиве. Этот новый массив должен содержать то, что вы хотите.
С помощью 2 улучшений можно найти, если он содержит не только первый char, но и третий параметр для определения возвращаемого значения: true означает, что возвращает только число элементов внутри массива (index/key), false или что-либо, что не принимается, или нет значения означает возврат полного массива строк [element], а если установлено "position = 3", верните значения массива, который содержит строку точно в поле "after = ', здесь 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)