Как искать строку внутри массива строк
После поиска ответа в других сообщениях, я почувствовал, что должен спросить об этом.
Я посмотрел на Как проверить, содержит ли массив объект в 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".
Любая идея?
Ответы
Ответ 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
)