Estaba en leetcode y encontré un problema if quería resolver usando for in lugar de convertir un número romano en un número natural:
let s = "IV" let res = 0 let dic = { M: 1000, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1 }después de configurar las variables básicas, hice el código real:
for (let i in s) { if (dic[s[i]] < dic[s[i + 1]]) { res -= dic[s[i]]; } else { res += dic[s[i]]; } } haciendo esto, el resultado es 6 en lugar de 4, lo cual me sorprende, si tomamos i = 0 , tenemos que if (1 < 5) {res -= 1} entonces cuando i = 1 sumará 5 a -1, entonces el resultado debería ser 4.
después de intentarlo, encontré una manera que lo hizo exactamente como lo hice pero usando for (let i = 0; i < s.length; i++) y funcionó.
Mi pregunta es ¿por qué funciona con otro tipo de for ? ¿Hay alguna manera de hacerlo con for in ya que es más legible?
i es una cadena. Así que usa parseInt así:
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);