所以我正在寻找一种方法来从一个从索引0开始的更大的String生成所有可能的子串。所以让我们说我们有
var a = "test";
然后我要生成
"test", "tes", "te" and "t"
我想用substring,substr或slice做这个,我在这里测试了它们:http://jsperf.com/loop-over-string
现在切片方法几乎两次与其他方法一样快。任何人都可以解释一下吗?或者有更快的方法来做到这一点吗?
答案 0 :(得分:2)
在您的基准测试slice
中更快,因为text
的长度会减少每次迭代。
如果您查看V8中的substr
,substring
和slice
实现,您会发现它们使用相同的内部函数%_SubString
。他们只能以可忽略的成本操纵其参数。
String.prototype.slice
:https://github.com/v8/v8/blob/master/src/string.js#L567 String.prototype.substring
:https://github.com/v8/v8/blob/master/src/string.js#L713 String.prototype.substr
:https://github.com/v8/v8/blob/master/src/string.js#L748 答案 1 :(得分:1)
这似乎更快:
substr = ""
for (var i = 0; i < length; i++) {
substr += text.charAt(i)
}