Java

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

2018-02-23  本文已影响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));
}

效率对比实验

效率对比实验结果

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函数加入到您的函数库吧!

上一篇下一篇

猜你喜欢

热点阅读