Как искать строку внутри массива строк - PullRequest
43 голосов
/ 24 марта 2011

После поиска ответа в других постах я почувствовал, что должен спросить это.Я посмотрел на Как проверить, содержит ли массив объект в JavaScript? и Лучший способ узнать, находится ли элемент в массиве JavaScript? и не смог получить там кодна работу.

Я собираю HTML-код для вставки в массив, поэтому каждый элемент представляет собой строку HTML-кода.

, например:

i[0]='<param name=\"bgcolor\" value=\"#FFFFFF\" />'
i[1]='<param name=\"width" value=\"640\" />'
i[2]='<param name=\"height\" value=\"360\" />'   
i[3]='more html code' 

Я хочучтобы найти этот массив и найти строку, в которой находится слово 'height'.

Поэтому в идеале я хотел бы написать функцию, которая возвращает индекс элемента, в котором появляется высота.

К счастью, в этом массиве нет дубликатов, поэтому есть только одно вхождение.

при простом поиске объекта я получаю 'false' возвраты.

Есть идеи?

Ответы [ 4 ]

51 голосов
/ 24 марта 2011

Это так же просто, как итерация массива и поиск регулярного выражения

function searchStringInArray (str, strArray) {
    for (var j=0; j<strArray.length; j++) {
        if (strArray[j].match(str)) return j;
    }
    return -1;
}

Edit - сделать str аргументом функции.

11 голосов
/ 24 марта 2011

Расширение функции содержимого, с которой вы связаны:

containsRegex(a, regex){
  for(var i = 0; i < a.length; i++) {
    if(a[i].search(regex) > -1){
      return i;
    }
  }
  return -1;
}

Затем вы вызываете функцию с массивом строк и регулярным выражением, в вашем случае для поиска высоты:

containsRegex([ '<param name=\"bgcolor\" value=\"#FFFFFF\" />', 'sdafkdf' ], /height/)

Вы также можете также вернуть индекс, где высота была найдена:

containsRegex(a, regex){
  for(var i = 0; i < a.length; i++) {
    int pos = a[i].search(regex);
    if(pos > -1){
      return [i, pos];
    }
  }
  return null;
}
9 голосов
/ 12 июля 2016

Вы можете использовать функцию Array.prototype.find в javascript. Массив найти MDN .

Таким образом, чтобы найти строку в массиве строк, код становится очень простым. Плюс, как реализация браузера, он обеспечит хорошую производительность.

Ex.

var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find(
    function(str) {
        return str == value;
    }
);

или используя лямбда-выражение, оно станет намного короче

var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find((str) => str === value);
4 голосов
/ 21 июня 2016

Быстрее избегайте использования регулярных выражений , если вы просто пытаетесь найти первое совпадение подстроки в массиве строковых значений. Вы можете добавить свою собственную функцию поиска по массиву:

Код

Array.prototype.findFirstSubstring = function(s) {
            for(var i = 0; i < this.length;i++)
            {
                if(this[i].indexOf(s) !== -1)
                    return i;
            }
            return -1;
        };

Использование :

i.findFirstSubstring('height');

Возвращает

-1, если не найден, или индекс массива вхождения первой подстроки, если он найден (в вашем случае это будет 2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...