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-使
扩展链接到的包含函数:
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;如果找到,则为第一个子字符串的数组索引(在您的情况下为