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

标签 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);
  }

这似乎有效。控制台日志表明 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/

相关文章:

c++ - 迭代引用?

javascript - Bootstrap - 滚动时带有动态内容的粘性导航栏、粘性侧边栏(左侧和右侧)

android - 将 EditText View 动态添加到水平 ScrollView

javascript - 如何向下滚动页面以使指定元素位于顶部?

java - 将 String 转换为 int 以获得唯一的数字

C、如何将数组中的数字拆分为 int

c++ - 将 `char []` 传递给接受 `std::string&` 的函数是好习惯吗

Linux 生成文件 : How to exit for loop early with error message

JavaScript:将日/周转换为年

c# - 将 Google Chart Interactive 与 ASP.NET 和 C# 集成