关于javascript:如何在字符串数组中搜索字符串

How to search for a string inside an array of strings

在其他帖子中寻找答案后,我觉得我必须问这个问题。我研究了如何检查数组是否包含javascript中的对象?找到项目是否在javascript数组中的最佳方法是什么?无法使代码在那里工作。

我正在捕获一个嵌入到数组中的HTML代码,因此每个项都是一行HTML代码。

例如:

1
2
3
4
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"所在的行。

所以理想情况下,我想编写一个函数,返回"height"出现的项的索引。

幸运的是,这个数组中没有重复项,所以只出现一次。

通过简单的对象搜索,我得到"false"返回。

有什么想法吗?


它就像迭代数组并查找regexp一样简单

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

edit-使str作为函数的参数。


扩展链接到的包含函数:

1
2
3
4
5
6
7
8
containsRegex(a, regex){
  for(var i = 0; i < a.length; i++) {
    if(a[i].search(regex) > -1){
      return i;
    }
  }
  return -1;
}

然后使用字符串数组和regex调用函数,在这种情况下查找高度:

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

您还可以返回找到高度的索引:

1
2
3
4
5
6
7
8
9
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;
}


您可以在javascript中使用array.prototype.find函数。数组查找。

因此,要在字符串数组中查找字符串,代码变得非常简单。另外,作为浏览器的实现,它将提供良好的性能。

前任。

1
2
3
4
5
6
7
var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find(
    function(str) {
        return str == value;
    }
);

或者使用lambda表达式,它将变得更短

1
2
3
var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find((str) => str === value);

如果您只是在一个字符串值数组中查找第一个子字符串匹配,那么避免使用正则表达式就更快了。您可以添加自己的数组搜索功能:

代码:

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

用途:

1
i.findFirstSubstring('height');

返回:

-如果找不到,则为1;如果找到,则为第一个子字符串的数组索引(在您的情况下为2)