Sai*_*ai -1 javascript arrays sorting
我想对皇室名字进行排序。对字母表的第一偏好。如果两个名字相同,那么我想按罗马数字排序。例如,如果输入是:King III、King II、Queen IX。(因为 1st 2 个字符串相同,它们需要按附加的罗马数字排序)所以预期输出:King II、King III、Queen IX。
我尝试将罗马数字存储在哈希图中并编写一个函数,将给定数组中的罗马数字替换为 King 2、King 3、Queen 9,然后尝试排序但无法正确实现。任何人都可以帮助我吗?
function romanToNum(roman) {
if (roman === "") return 0;
if (roman.startsWith("L")) return 50 + romanToNum(roman.substr(1));
if (roman.startsWith("XL")) return 40 + romanToNum(roman.substr(2));
if (roman.startsWith("X")) return 10 + romanToNum(roman.substr(1));
if (roman.startsWith("IX")) return 9 + romanToNum(roman.substr(2));
if (roman.startsWith("V")) return 5 + romanToNum(roman.substr(1));
if (roman.startsWith("IV")) return 4 + romanToNum(roman.substr(2));
if (roman.startsWith("I")) return 1 + romanToNum(roman.substr(1));
return 0;
}
console.log(
["King III", "King II", "Queen IX"]
.map((n) => ({name: n, num: romanToNum(n.split(" ").pop())}))
.sort((a, b) => (a.num - b.num))
.map(({name, num}) => name)
);
Run Code Online (Sandbox Code Playgroud)
romanToNum
功能改编自这个答案。数组首先映射到{name, num}
对象,然后按 排序num
,然后name
仅转换回s。
归档时间: |
|
查看次数: |
2206 次 |
最近记录: |