首页 > 解决方案 > 如何修复“for”循环中的“let i = 0”值在完成循环后再次变为0?

问题描述

所以我在值传递循环示例中的最大值后使用for循环let i = 0作为计数器:ifor

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

标签: javascriptarraysstring

解决方案


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

您应该在循环完成后val添加。valu请参阅下面的代码段。

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"));

最大值是 59。 i 值又回到 0。代码有什么问题?

因为变量i是局部变量,并且每次循环都开始将其初始化为 value 0

更好的方法

一个简单的代码是split()字符串" ",然后map()length每个单词的字符串,然后将其传递给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"));


推荐阅读