const romanObj = [
{
key: 'I',
value: 1
},
{
key: 'V',
value: 5
},
{
key: 'X',
value: 10
},
{
key: 'L',
value: 50
},
{
key: 'C',
value: 100
},
{
key: 'D',
value: 500
},
{
key: 'M',
value: 1000
},
]
const keyEnum = romanObj.map(v => v.key);
function getCharIndex(char) {
return keyEnum.indexOf(char);
}
function getCharValue(char) {
return romanObj.find(v => v.key === char).value;
}
function getEachRomanCount(char) {
let sum = 0;
for(let i = 0; i<char.length; i++) {
sum += getCharValue(char.charAt(i));
if(getCharIndex(char.charAt(i)) < getCharIndex(char.charAt(i+1))) {
sum = getCharValue(char.charAt(i+1)) - sum;
break;
}
}
return sum;
}
var romanToInt = function(s) {
let eachDigit = [];
let lastIndex = s.length;
for(let i = s.length - 1; i >= 0; --i) {
if(getCharIndex(s.charAt(i)) < getCharIndex(s.charAt(i - 1)) || i === 0) {
const digestChar = s.slice(i, lastIndex);
eachDigit.push(digestChar);
lastIndex = i;
}
}
return eachDigit.reduce((pre, curr) => pre + getEachRomanCount(curr), 0);
};