Leetcode #13 罗马转整数 Javascript

Leetcode #13 Roman to Integer Javascript

我目前正在尝试解决 Leetcode 上的“Roman to Integer”问题。

我的代码使用罗马数字,例如(“III (3)”、“V (5)”、“X (10)”、“C (50)”)作为一些示例。我的代码崩溃的地方是罗马数字,例如 ("IV (4)", "IX (9)", "XL (40)").

 let romanNum = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
 let specCases = {"IV":4, "IX":9, "XL":40, "XC":90, "CD":400, "CM":900}
 arr.reduce((acc,cur,i) => {
    //check if it is one of the special cases
    let lastTwo = ""
    if (i !== 0) {
        let lastTwo = arr[i-1].concat(cur)
        console.log(lastTwo)
        console.log(Object.keys(specCases))
        console.log(typeof(lastTwo))
    }
    if (lastTwo in specCases) {
        acc = acc - romanNum[arr[i-1]] + specCases[lastTwo]
        return console.log(acc)
    }
    //for non-sepcial cases run the code below
    acc = acc + romanNum[cur]
    return acc
}, 0)

我还在上面包含了相关的代码片段。我检查以确保正确分配了“lastTwo”变量,正确访问了 specCases 对象键,并且 typeof(lastTwo) 是一个字符串。我上面检查的所有内容似乎都是正确的。

下面是link使用“IX”时leetcode输出的照片:

当运行代码时,第二个条件语句不满足,那部分代码不是运行.

为什么第二个条件不满足?

巴尔马尔回答了这个问题:

将 let lastTwo = arr[i-1].concat(cur) 更改为 lastTwo = arr[i-1].concat(cur)。您正在 if 的范围内创建一个新变量,而不是分配外部变量。