【发布时间】:2021-11-19 00:44:09
【问题描述】:
我在 leetcode 上发现了一个问题,我想使用 for in 而不是 if 来解决关于将罗马数转换为自然数的问题:
let s = "IV"
let res = 0
let dic = {
M: 1000,
D: 500,
C: 100,
L: 50,
X: 10,
V: 5,
I: 1
}
设置基本变量后,我编写了实际代码:
for (let i in s) {
if (dic[s[i]] < dic[s[i + 1]]) {
res -= dic[s[i]];
} else {
res += dic[s[i]];
}
}
这样做的结果是 6 而不是 4,这让我感到惊讶,如果我们采用 i = 0,我们就有 if (1 < 5) {res -= 1},那么当 i = 1 将 5 添加到 -1 时,结果应该是 4。
在尝试之后,我找到了一种与我完全一样的方法,但使用 for (let i = 0; i < s.length; i++) 并且有效。
我的问题是为什么它适用于另一种类型的for?有没有办法使用for in 来实现它,因为它更具可读性?
【问题讨论】:
-
iinfor... in是一个字符串,而不是一个 int。
标签: javascript arrays for-loop for-in-loop