所以我使用for
循环 let i = 0
作为 i
之后的计数器值通过 for
中的最大值循环示例:
for(let i = 0; i < 60; i++)
最大值为59
。 i
值再次回到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/