Javascript里面最常用的6种查找字符串的方式——以及它们的性能测试

在字符串中搜索子字符串,是最基本的操作之一,我们经常会遇到,我通常做的是,查看代码中的其他地方,看看其他人都做了什么,然后做同样的事情!现在,我只是想提出一些最常用的选项,以及它们之间的性能比较,以防您关心性能,以便当涉及到将来的选择时,您知道哪一个是更好的选择!

代码展示

下面是我在搜索字符串时经常看到的6种不同的方法:

// 1. includes (introduced in ES6) 
var string = "string to search for substring",
    substring = "sea";
string.includes(substring);

// 2. RegExp: test
var string = "string to search for substring",
    expr = /sea/;  // no quotes here
expr.test(string);

//3. string.search
var string = "string to search for substring",
    expr = "/sea/";
string.search(expr);

//4. lodash: includes
var string = "string to search for substring",
    substring = "sea";
_.includes(string, substring);

// 5. string.match
var string = "string to search for substring",
    expr = "/sea/";
string.match(expr);

// 3. string.indexOf
var string = "string to search for substring",
    substring = "sea";
string.indexOf(substring) !== -1;

性能基准测试

  1. 如果你想知道,给出一个一般长度的字符串,哪个会表现得更好,regex.test是最快的,其次是string.search(libraries by ES6),第三位属于string.indexof方法:

基准测试①
前往测试页面 →

  1. 如果放大测试字符串的规模会怎么样?

我缩放这个字符串,把它放大1000倍(100万字符,甚至1000万字符),我看到string.indexof是一个赢家,虽然不是很多!
下面这是我的基准测试的结果,我创建了1~1000万个字符的字符串来进行测试
基准测试非常大的字符串,并重复子字符串1000次:
基准测试②
前往测试页面 →
译者注:这个链接提供的测试内容感觉跟作者描述的测试内容不符,可能链接是错的

你可能感兴趣的:(javascript,字符串处理)