大小写字母排序,不考虑大小写-JavaScript

时间:2019-06-07 17:49:49

标签: javascript sorting ascii alphabetical-sort alphabetized

正在研究this codewars challenge

  

重新排列字符串的字符,以便将它们以“不区分大小写的字母顺序出现”的顺序连接到新字符串中。只需删除空格和标点即可!

     

输入被限制为不包含数字,仅包含英文字母的单词。

     

示例:

     

alphabetized(“圣经”)//“ BbeehHilloTy”

我从开始:

function alphabetized(s) {
    s = s.replace(/\s/g, "").toLowerCase();
    return s.split("").sort().join("");
}

console.log(alphabetized("The Holy Bible"));

但是我们当然要返回BbeehHilloTy,并保持原始字符的大写。

坦率地说,我不明白为什么期望的结果应该是BbeehHilloTy

如果我们不按照ASCII字符代码值进行排序,那么由什么决定在新字符串中小写字母前面是否应该出现大写字母?

2 个答案:

答案 0 :(得分:1)

这是一种通过比较字符串中字符是否相等的索引来创建稳定排序的方法:

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"));

答案 1 :(得分:0)

根据@ 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上的所有测试。

相关问题