我很好奇JavaScript中indexOf
和Array
可用的String
方法的效率是否存在差异。我认为indexOf
在String上的效率低于在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);
然后我使用
的开始和结束时间戳arr.indexOf(needle); // faster!
str.indexOf(needle);
我在节点中做了这个测试,新的测试结果显示:
time used on Array is: 35
time used on String is: 57
因此,Array对indexOf比String更有效。这个新测试基本上会创建最坏的情况 - 在String或Array的最后一针。
修改
如果indexOf
在Array上效率更高,我想知道在使用indexOf
方法搜索a之前是否应首先将String(例如用逗号分隔)拆分为数组子串。
对于这个字符串:
var str2 = "hello,world,country,continent,ocean"
如果您搜索ocean
,是否首先将字符串str2
拆分为数组,然后使用indexOf
查找ocean
?
var arr2 = str2.split(",");
arr2.indexOf('ocean');
答案 0 :(得分:2)
我根据您的编辑猜测您要使用indexOf来检查列表中是否存在以字符串形式开头的给定元素。
然后两个选项是在字符串本身上使用indexOf或首先将其解析为数组并查看该元素是否存在,因为您知道格式为&#34; item1,item2&#34;。
http://jsperf.com/indexof-array-vs-string-efficiency
基于jsperf,我们可以看到,尽管indexOf在数组本身上更快,但将字符串转换为数组也会产生成本,并且您最好不要对原始字符串执行indexOf。
*请注意,String indexOf需要进行一些额外的修改,以确保如果你有像blueocean这样的元素,indexOf(&#34; ocean&#34;)不会返回true,并且可能会想要indexOf( &#34;,海洋,&#34)