javascript - 如何修复“for”循环中的“let i = 0”值在完成循环后再次变为0?
问题描述
所以我在值传递循环示例中的最大值后使用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
解决方案
您代码中的问题是最后一个字符串不会被添加到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"));
推荐阅读
- pine-script - 标签中星期几的统计信息
- google-chrome - Chrome 91 更新破坏了所有表格视图
- javafx - JavaFx 表格单元链接到多个属性
- java - 带有 Java 代理的 Azure Application Insights:自动收集的远程依赖项自定义属性
- javascript - Flask:POST许多输入字段
- php - 使用 PDO 将 MySQL 表行移动到另一个表
- amazon-web-services - 无法从 AWS 海王星上的读取器端点读取
- powerbi - 在 PowerBI 中将持续时间格式化为 hh:mm:ss 可重用
- python - Pandas,如何将列值从整数转换为预定义的字符串值
- gnu - GLPK #glpsol #TSP #读取数据