const romanToNum = (romanNumber) => {
romanNumber = romanNumber.toUpperCase();
const romanNumList = ["CM","M","CD","D","XC","C","XL","L","IX","X","IV","V","I"];
const corresp = [900,1000,400,500,90,100,40,50,9,10,4,5,1];
let index = 0, num = 0;
for(let rn in romanNumList){
index = romanNumber.indexOf(romanNumList[rn]);
while(index != -1){
num += parseInt(corresp[rn]);
romanNumber = romanNumber.replace(romanNumList[rn],"-");
index = romanNumber.indexOf(romanNumList[rn]);
}
}
return num;
}
const samples = [
'Philip XXI',
'Philipe XXI',
'Philipe II',
'Bruce II',
'Bruce XXI',
'Bruce III',
'Louis III',
'Louis I',
]
const extract = (name) => {
const roman = name.split(' ').pop()
const prefix = name.replace(roman, '').trim()
const level = romanToNum(roman)
return [prefix, level, roman]
}
const comparator = (a, b) => {
const a1 = extract(a)
const b1 = extract(b)
return a > b
}
const sorted = samples.sort(comparator)
console.log(sorted)