我很好奇在JavaScript中,Array和String都可以使用indexOf方法,它们之间的效率是否会有所不同。我认为,在String上使用indexOf方法的效率要低于在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);
我在Node中进行了此测试,新的测试结果显示:
time used on Array is: 35
time used on String is: 57
因此,相对于字符串而言,数组对于indexOf更有效。这个新的测试基本上创造了最坏的情况——即字符串或数组的结尾是目标字符。
编辑:
如果在数组上 indexOf
更有效率,那么在使用 indexOf
方法搜索子字符串之前,我们是否应该先将字符串(例如按逗号分隔)拆分为数组?
对于这个字符串:
var str2 = "hello,world,country,continent,ocean"
如果你搜索 "ocean",你会先将字符串 "str2" 分割成数组,然后使用 indexOf 方法来查找 "ocean" 吗?
var arr2 = str2.split(",");
arr2.indexOf('ocean');
indexOf
方法的算法和实现也是如此。这不是一个应用于两个数据结构的单一函数,它们是两个非常不同的函数。那么,这个问题的重点是什么? - Leo