javascript - 如何修复 "let i = 0 "循环中的 "for"值在完成循环后再次变为 0?

标签 javascript arrays string

所以我使用for循环 let i = 0作为 i 之后的计数器值通过 for 中的最大值循环示例:

for(let i = 0; i < 60; i++)

最大值为59i值再次回到0 。代码有什么问题?

我用 console.log() 进行调试检查每个循环和数组中的值,但我仍然不明白为什么 i值再次回到0并再次开始循环。

function findLongestWordLength(str) {
  let val = 0;
  let valu = [];

  // Make an array contain every word length 
  for (let i = 0; i < str.length; i++) {
    let a = str.split("")[i];

    if (a == " ") {
      valu.push(val);
      val = 0;
    } else {
      val++;
    }
    
    console.log(i);
  }
  
  val = 0;

  // Search for the max value 
  for (let i = 0; i < valu.length; i++) {
    if (valu[i] > val) {
      val = valu[i];
    }
  }

  return val;
}

findLongestWordLength("What if we try a super-long word such as otorhinolaryngology");
console.log(findLongestWordLength("What if we try a super-long word such as otorhinolaryngology"));

这是控制台中的结果:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

我预计输出为19 ,但实际输出是 4

最佳答案

代码中的问题是最后一个字符串不会添加到 value 数组中,因为要添加到 valu 数组的长度条件 if (a = == "") 应为 true。对于最后一个词,它永远不会成为 true,因为它后面没有 ""

循环结束后,您应该将 val 添加到 value 中。请参阅下面的代码片段。

function findLongestWordLength(str) {
  let val = 0;
  let valu = [];
  let arr = str.split('');
  // Make an array contain every word length 
  for (let i = 0; i < str.length; i++) {
    let a = arr[i];

    if (a === " ") {
      valu.push(val);
      val = 0;
    } else {
      val++;
    }
  }
  valu.push(val) // this line is only added line by me.
  val = 0;

  // Search for the max value 
  for (let i = 0; i < valu.length; i++) {
    if (valu[i] > val) {
      val = valu[i];
    }
  }

  return val;
}

findLongestWordLength("What if we try a super-long word such as otorhinolaryngology");
console.log(findLongestWordLength("What if we try a super-long word such as otorhinolaryngology"));

The max value is 59. The i value back again to 0. What's wrong with the code ?

因为变量i是局部变量,每次循环开始时都会将其初始化为值0

更好的方法

一个简单的代码是将split()字符串按"",然后map()它的长度 每个单词,然后使用 Spread Syntax 将其传递给 Math.max()

function findLongestWordLength(str) {
  return Math.max(...str.split(' ').map(x => x.length))
}

console.log(findLongestWordLength("What if we try a super-long word such as otorhinolaryngology"));

关于javascript - 如何修复 "let i = 0 "循环中的 "for"值在完成循环后再次变为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56306491/

相关文章:

c++ - 二维数组中的指针运算

c - 数组中素数的总和

c - 初始化为空字符串的字符数组元素的值

java - 如何将 double 列表转换为字符串列表?

javascript - 从另一个文件覆盖 JS 函数

javascript - 如何在translate3d函数上使用变量?

javascript - asp.net 中没有 javascript 的寻呼机

php - 从用户 id 数组中选择帖子 id - mysql

Javascript 控制台在 Swift 中登录 UIWebView

c++ - 使用 << 运算符构造 std::string