Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript在字符串中查找字母对,为什么我的测试不起作用?_Javascript_String_For Loop_Substring - Fatal编程技术网

Javascript在字符串中查找字母对,为什么我的测试不起作用?

Javascript在字符串中查找字母对,为什么我的测试不起作用?,javascript,string,for-loop,substring,Javascript,String,For Loop,Substring,我在玩弄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); } 这似乎奏

我在玩弄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]报告为“未定义”

当t=0时,返回第一个字符;但是,当t=1时,子字符串要长得多,当t>=2时,第t个字符直到最后一个字符

现在我假设我可以使用一个“普通”来进行循环使用 对于(t=0;t
但首先,我更喜欢“in”关键字的简洁性,我想学习如何使用“in”关键字,因为我不熟悉其他语言中的“in”关键字。其次,我想知道为什么上面使用“in”关键字的方法不起作用。我的思路中的错误在哪里?

问题是
t
是一个字符串,因此
t+1
也是一个字符串。然后,方法
substring
的行为方式与给定
t+1
时的行为方式不同。如果您放置
str.substring(parseInt(t),parseInt(t)+2)它给出的结果与您期望的结果类似(有更好的方法可以做到这一点)。区别在于最后一个是
3:t
,因为没有更多的字符


在这种情况下,我更愿意使用
for(var t=0;t

因为in-javascript有点特殊,它枚举了对象的属性,可能会给出一些意外的结果

看看:

您遇到的一个问题是,由于x+1(在上一个循环周期中,您超出了数组),索引器将越界


对于数组,您最好使用常规的For循环,或者您可以使用一些框架(例如jQuery)提供的一些不错的数组助手方法。

对于JavaScript的
For…in
循环来说,这不是一个好的用例。该循环类型实际上在对象的关键点上循环。因为JavaScript中的所有键都是字符串,
t
始终是字符串。因此,
t+1
也是一个字符串,
+
是字符串串联,而不是求和

您真正想要做的是一个正常的for循环,计算索引(这也让您提前停止,这样您就不会尝试获取最后一个字符及其后的字符):

for(变量i=0;i

嗯。t是一个字符串解释了很多。。。使用任何有用的东西是我学习东西的方式,很高兴知道这不是我的建议。我将切换到我习惯的for循环。谢谢!:)@ErikLeppen很高兴我的解释有帮助。我只是注意到我弄乱了代码的格式,所以现在可读性更好了。
  //report letterpairs
  for (var t in str) {
    var c = str.substring(t, t + 1);
    console.log(t + ': ' + c);
  }
for(var i = 0;i < str.length - 1;i++) {
    var c = str[i] + str[i+1];
    console.log(t + ": " + c);
}