【发布时间】:2016-01-08 02:00:54
【问题描述】:
我很好奇 JavaScript 中 Array 和 String 都可用的 indexOf 方法的效率是否存在差异。我认为 indexOf 在 String 上的效率低于在 Array 上的效率,我的 new 测试结果支持这一点。例如:
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,Array 比 String 更有效。这个新的测试基本上创造了最坏的情况——在字符串或数组的最后一个针。
编辑:
如果indexOf 在数组上更有效,我想知道我们是否应该先将字符串(例如用逗号分隔)拆分为数组,然后再使用indexOf 方法搜索子字符串。
对于这个字符串:
var str2 = "hello,world,country,continent,ocean"
如果你搜索ocean,你会先把字符串str2拆分成一个数组,然后用indexOf找到ocean吗?
var arr2 = str2.split(",");
arr2.indexOf('ocean');
【问题讨论】:
-
我不知道你的假设是什么或为什么。就此而言,我什至不知道你在问什么。
-
我对这个有点斜视。这些操作做了两个不同的事情。这就像问使用十字头螺丝刀拧松螺丝或使用夜行器抓大眼虫是否更有效。差异很重要的最终目标或场景是什么?
-
数组的一个好处是它可以通过首先比较字符串长度来避免实际的逐字符比较。如果长度匹配,它只会进行字符比较。现在您似乎想知道是否应该先拆分,但这也会产生相当多的开销。与许多关于性能的问题一样,这完全取决于具体情况。
-
是的,这两个方法的名称是相同的,然后呢?数组和字符串是完全不同的数据结构,它们的
indexOf方法的算法和实现也是如此。它不是应用于两个数据结构的单个函数,它们是两个非常不同的函数。那么,这个问题的意义何在?
标签: javascript arrays string substring indexof