Подтвердить что ты не робот

Как искать строку внутри массива строк

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

Я собираю HTML-код для встраивания 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' 

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

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

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

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

Любая идея?

4b9b3361

Ответ 1

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

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

Изменить - сделать str в качестве аргумента функции.

Ответ 2

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

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

Ответ 3

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

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

Исх.

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

Ответ 4

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

Код

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)