【问题标题】:for in doesn't substract but for doesfor in 不减,但 for 减
【发布时间】: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 &lt; 5) {res -= 1},那么当 i = 1 将 5 添加到 -1 时,结果应该是 4。

在尝试之后,我找到了一种与我完全一样的方法,但使用 for (let i = 0; i &lt; s.length; i++) 并且有效。

我的问题是为什么它适用于另一种类型的for?有没有办法使用for in 来实现它,因为它更具可读性?

【问题讨论】:

  • i in for... in 是一个字符串,而不是一个 int。

标签: javascript arrays for-loop for-in-loop


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 2016-12-24
    相关资源
    最近更新 更多