正在应对这个代码战争挑战。
对字符串的字符重新排序,以便它们按"不区分大小写的字母顺序"顺序连接成新字符串。空格和标点符号应该简单地删除!
输入仅限于不包含数字,只能包含包含英文字母的单词。
例:
按字母顺序排列("圣经"(//"BbeehHilloTy">
我从:
function alphabetized(s) {
s = s.replace(/s/g, "").toLowerCase();
return s.split("").sort().join("");
}
console.log(alphabetized("The Holy Bible"));
但我们当然要回归BbeehHilloTy
,保持原始字符的大写。
坦率地说,我不明白为什么应该BbeehHilloTy
预期的结果.
如果我们不根据 ASCII 字符代码值进行排序,那么是什么决定了大写字母是否应该出现在新字符串中的小写字母前面?
下面是一个通过比较字符串中字符索引(如果它们相等(来创建稳定排序的方法:
function alphabetized(s){
s = s.replace(/s+|W+|d+|[_]+/g, "");
return s.split('')
.map(function(x, i){ return [x, i]; })
.sort(function([a, i], [b, j]){
a = a.toLowerCase();
b = b.toLowerCase();
if (a == b)
return i - j;
else if (a < b)
return -1;
else
return 1;
})
.map(function([x, i]){ return x; })
.join('');
}
console.log(alphabetized("The Holy Bible"));
根据@user3483203的代码:
function alphabetized(s) {
s = s.replace(/s+|W+|d+|[_]+/g, "");
return s.split("").sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).join("");
}
console.log(alphabetized("The Holy Bible"));
所以关键是在这里使用 localCompare((。
编辑:实际上,此解决方案不适用于Codewars的所有测试。