美文网首页Java
JavaScript中包含子串判定的几种方法及效率对比分析

JavaScript中包含子串判定的几种方法及效率对比分析

作者: 毛三十 | 来源:发表于2018-02-23 09:30 被阅读8次

    说明

    在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和时间数据绘制效率对比图。
    效率对比实验结果

    42度空间在线演示地址

    结论

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

    includes函数

    if (!String.prototype.includes) {
      String.prototype.includes = function(search, start) {
        'use strict';
        if (typeof start !== 'number') {
          start = 0;
        }
        if (start + search.length > this.length) {
          return false;
        } else {
          return this.indexOf(search, start) !== -1;
        }
      };
    }
    

    最后记得把includes函数加入到您的函数库吧!

    相关文章

      网友评论

        本文标题:JavaScript中包含子串判定的几种方法及效率对比分析

        本文链接:https://www.haomeiwen.com/subject/xtbtxftx.html