我有字符串(长度50-2000)和潜在子字符串(长度2-8),它只能从特定位置开始(它可能出现在别处,但我不在乎)。我需要测试大量的字符串,所以速度是关键。那么有更快的方式:
var q = baseString.indexOf(searchString, assumedIndex) === assumedIndex;
或
var q = baseString.substr(assumedIndex, searchString.length) === searchString;
答案 0 :(得分:0)
请记住Amit在评论中所说的内容,我想我可能会添加一个替代方案(可能)比至少substr
方法更快:
var q = baseString.startsWith(searchString, assumedIndex);
来自MDN:
startsWith()
方法确定字符串是否以。开头 另一个字符串的字符,视情况返回true
或false
。
小例子:
> "Hello world!".startsWith("world!",6)
< true
我认为它可能更快的原因是因为polyfill(如下所示)直接用substr
实现,除了浏览器实现将本地实现并且可能没有字符串复制。所以它应该至少和你建议的一样快。
填充工具:
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position){
position = position || 0;
return this.substr(position, searchString.length) === searchString;
};
}