Поиск совпадающей строки из массива javascript

У меня есть один массив строк. Мне нужно найти все строки, начиная с ключа. например: если имеется массив ['apple','ape','open','soap'] при поиске с помощью ключа "ap" я должен получить только "яблоко" и "обезьяна", а не "мыло".

Это в javascript.

Ответ 1

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;
}

Ответ 2

Используйте indexOf, как предложил @Annie. indexOf используется для нахождения подстрок внутри данной строки. Если нет совпадения, он возвращает -1, в противном случае он возвращает начальный индекс первого совпадения. Если этот индекс 0, это означает, что совпадение было в начале.

Другим способом является использование регулярных выражений. Используйте символ ^ для соответствия с началом строки. Регулярное выражение:

/^he/

будет соответствовать всем строкам, начинающимся с "he", таких как "привет", "слышать", "гелий" и т.д. test для RegExp возвращает логическое значение, указывающее, было ли успешное совпадение. Вышеупомянутое регулярное выражение может быть проверено как /^he/.test("helix"), которое вернет true, а /^he/.test("sheet") не будет, поскольку "he" не появляется в начале.

Прокрутите каждую строку во входном массиве и соберите все строки, которые соответствуют (с использованием indexOf или regex) в новом массиве. Этот новый массив должен содержать то, что вы хотите.

Ответ 3

С помощью 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;
}

Ответ 4

Вы можете использовать фильтр с регулярным выражением, чтобы выполнить это:

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)