我正在研究 Javascript,现在我想从一个字符串中提取所有成对的连续字符。因此,如果字符串是“test”,我想输出“te”、“es”和“st”。现在我发现了如何从字符串中提取单个字母,方法是将字符串视为一个数组,并使用“in”关键字,如下所示:
var str = 'this is a test';
//report letters
for (var t in str) {
var c = str[t];
console.log(t + ': ' + c);
}
这似乎有效。控制台日志表明 t 是一个索引。所以我想我应该能够使用 t + 1 作为 str 中下一个字符的索引。但是,在尝试以下操作时,我的猜测似乎不起作用:
//report letterpairs
for (var t in str) {
var c = str[t] + str[t + 1];
console.log(t + ': ' + c);
}
这会将 str[t + 1] 报告为“未定义”。
//report letterpairs
for (var t in str) {
var c = str.substring(t, t + 1);
console.log(t + ': ' + c);
}
当 t = 0 时返回第一个字符;但是当 t = 1 时是一个更长的子字符串,当 t >= 2 时是第 t 个到最后一个字符。
现在我假设我可以使用一个“正常的”循环使用 对于 (t = 0; t < str.length; t += 1) {
但首先我更喜欢“in”关键字的简洁性,并且想学习如何使用“in”关键字,因为我对其他语言并不熟悉。其次,我想知道为什么上面使用“in”关键字的方法不起作用。我的思路哪里出错了?
最佳答案
这不是 JavaScript 的 for...in
循环的好用例。该循环类型实际上循环对象的键。因为 JavaScript 中的所有键都是字符串,所以 t
始终是一个字符串。因此,t + 1
也是一个字符串 - 而 +
是字符串连接,而不是总和。
你真正想要做的是一个普通的 for 循环,计算索引(这也让你提前停止,这样你就不会试图获取最后一个字符和它后面的字符):
for(var i = 0;i < str.length - 1;i++) {
var c = str[i] + str[i+1];
console.log(t + ": " + c);
}
For Arrays and Strings you should stick with the normal for
loop, not for...in
.
关于Javascript 在字符串中查找字母对,为什么我的测试不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23723571/