Roman ancestral sorting

node v10.24.1
version: 1.0.0
endpointsharetweet
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)
Loading…

no comments

    sign in to comment