javascript - for in 不减,但 for 减
问题描述
我在 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
因为它更具可读性?
解决方案
i
是一个字符串。所以像这样使用parseInt
它:
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.split("")) {
if (dic[s[i]] < (dic[s[parseInt(i)+1]])) {
res -= dic[s[i]];
} else {
res += dic[s[i]];
}
}
console.log("res",res);
推荐阅读
- c# - 在 Unity3D 项目保存期间检测 [ExecuteAlways] MonoBehavior 是否正在运行
- google-apps-script - 为多个选项卡和多行创建依赖下拉列表
- angular - Angular 9 - 单个 SPA 子路由问题
- python - 减去DataFrame中每一列的前一列的值
- c# - 从视图中右键单击“转到控制器”时,出现错误(“找不到匹配的控制器”)
- python - 根据字符串条件将字符串列表运行到另一列,并将值替换为 pandas 中匹配的字符串
- python-3.x - 为什么 beautifulsoup 没有显示任何结果?
- javascript - 使用 D3 版本 4 的表中的数据加载问题
- java - 不断检查需求的循环
- javascript - 忽略 ReactJS 中表列中的重复条目