Ton*_*yGW 5 javascript arrays string substring indexof
我很好奇是否存在indexOf可用于JavaScript Array和StringJavaScript 的方法的效率差异.我认为indexOfString上的效率低于Array,我的新测试结果支持这一点.例如:
var arr = ['abc', 'ab', 'abz', '1'];
var str = 'abcababz1';
var needle = 'abxx';
//concatenate to make them bigger
for (var i = 0; i < 30; i++) {
arr = arr.concat(arr);
str = str.concat(str);
}
arr.push(needle); //append needle last
str = str.concat(needle);
Run Code Online (Sandbox Code Playgroud)
然后我用了开始和结束时间戳
arr.indexOf(needle); // faster!
str.indexOf(needle);
Run Code Online (Sandbox Code Playgroud)
我在节点中做了这个测试,新的测试结果显示:
time used on Array is: 35
time used on String is: 57
Run Code Online (Sandbox Code Playgroud)
因此,Array对indexOf比String更有效.这个新的测试基本上创造了最坏的情况 - 针在String或Array的最后.
编辑:
如果indexOf在Array上效率更高,我想知道在使用该indexOf方法搜索子字符串之前是否应首先将String(例如用逗号分隔)拆分为数组.
对于这个字符串:
var str2 = "hello,world,country,continent,ocean"
Run Code Online (Sandbox Code Playgroud)
如果你搜索ocean,你会先将字符串拆分str2成一个数组然后indexOf用来查找ocean吗?
var arr2 = str2.split(",");
arr2.indexOf('ocean');
Run Code Online (Sandbox Code Playgroud)
根据您的编辑,我猜测您想要使用 indexOf 来检查列表中是否存在以字符串开头的给定元素。
然后两个选项是在字符串本身上使用 indexOf 或首先将其解析为数组并查看该元素是否存在于其中,因为您知道格式是“item1,item2”。
http://jsperf.com/indexof-array-vs-string-efficiency
基于 jsperf,我们可以看到,尽管 indexOf 在数组本身上速度更快,但将字符串转换为数组也会产生成本,并且最好对原始字符串执行 indexOf。
*请注意,如果您有像 blueocean 这样的元素,则 String indexOf 需要进行一些额外的修改,以确保 indexOf("ocean") 不会返回 true,并且可能需要 indexOf(",ocean,")