JavaScript中包含子串判定的几种方法及效率对比分析
by 毛三胖 on 2018年02月22日
阅:360赞:7

说明

简要介绍了在JavaScript中包含子串判定的几种方法,并对几种方法的运行效率进行了实验对比。

contain函数

function contain(string,sub) {
    return string.indexOf(sub) !== -1;
}

演示

说明

在JavaScript中并没有一个类似于contains的原生函数,用来判定是否包含子串。但是有如下几种方法可以实现该功能:

方法1:利用String.prototype.indexOf(),该函数 返回子串在主字符串中的位置。如果主字符串中不包含子串,返回-1。

function contain1(string,sub) {
    return string.indexOf(sub) !== -1;
}

方法2:利用String.prototype.includes()。该方法在ECMAScript 2015规范中出现,目前还没有在所有的浏览器上实现。

function contain2(string,sub) {
    return string.includes(sub);
}

方法3:利用String.prototype.search(),该函数返回模式匹配的位置,如不匹配返回-1。

function contain3(string,sub) {
     return string.search(new RegExp(sub)) > -1;
}

方法4:利用RegExp.prototype.test(),该函数用来判定模式是否匹配,直接返回布尔值。

function contain4(string,sub) {
    return new RegExp(sub).test(string);
}

方法5:利用String.prototype.match(),该方法可在字符串内检索指定的值,返回存放匹配结果的数组,如不匹配返回null。

function contain5(string,sub) {
    return !!string.match(new RegExp(sub));
}

效率对比实验

  • 随机构建50000个长度为100的主字符串数组和长度为2的子串做为实验数据。
  • 分别利用上述五种方法分别对数据进行对比测试。
  • 利用Baidu的Echarts和时间数据绘制效率对比图。

结论

为保证网页的运行效率,选择的实验样本很小,得出的时间结果有一定的偶然性。但综合对比和进行更大样本的实验显示,利用String.prototype.indexOf()方法的效率最好,稳定性强。

$ 热门标签
$ 贴士
简单是稳定的前提。 -Edsger Dijkstra
$ 声明
本站所有代码及文字都是作者精心汇编整理而成,转载代码及文字请明确注明出处和作者名称。