如何searchstring数组中的string
在其他post中寻找答案后,我觉得我必须问这个。 我看了如何检查数组是否包含JavaScript中的对象? 和最好的方法来查找一个项目是否在JavaScript数组? 并不能让代码在那里工作。
我正在捕获一个HTMLembedded代码到一个数组,所以每个项目是一行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'
我想search这个数组,find“高度”这个单词的位置。
所以理想情况下,我想写一个函数返回“高度”出现的项目的索引。
幸运的是,这个数组中没有重复,所以只有一个出现。
与简单的对象search我得到“虚假”的回报。
任何想法?
这和迭代数组并寻找正则expression式一样简单
function searchStringInArray (str, strArray) { for (var j=0; j<strArray.length; j++) { if (strArray[j].match(str)) return j; } return -1; }
编辑 – 使str
作为参数来运作。
扩展您链接到的包含function:
containsRegex(a, regex){ for(var i = 0; i < a.length; i++) { if(a[i].search(regex) > -1){ return i; } } return -1; }
然后你用一个string和一个正则expression式来调用函数,在你的情况下查找高度:
containsRegex([ '<param name=\"bgcolor\" value=\"#FFFFFF\" />', 'sdafkdf' ], /height/)
您还可以返回find高度的索引:
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函数。 数组查找MDN 。
所以要在string数组中findstring,代码变得非常简单。 另外作为浏览器实现,它将提供良好的性能。
防爆。
var strs = ['abc', 'def', 'ghi', 'jkl', 'mno']; var value = 'abc'; strs.find( function(str) { return str == value; } );
避免使用正则expression式会更快,如果您只是想在string值数组中find第一个子string匹配。 你可以添加你自己的数组searchfunction:
代码 :
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或者第一个子string的数组索引(如果find的话)(在你的情况下是2
)