首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按字母顺序排序字符串,而不考虑大写- JavaScript

按字母顺序排序字符串,而不考虑大写- JavaScript
EN

Stack Overflow用户
提问于 2019-06-07 17:49:49
回答 2查看 1.1K关注 0票数 2

这个码战挑战上工作。

重新排序字符串的字符,使它们以"case-insensitively-alphabetical-order-of-appearance“顺序连接到新字符串中。空格和标点符号应该简单地移除! 输入仅限于不包含数字和只包含英文字母的单词。 示例: 字母顺序(“圣经”) // "BbeehHilloTy“

我一开始是:

代码语言:javascript
复制
function alphabetized(s) {
    s = s.replace(/\s/g, "").toLowerCase();
    return s.split("").sort().join("");
}

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

当然,我们希望返回BbeehHilloTy,保持原始字符的大写。

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

如果我们没有根据ASCII字符代码值进行排序,那么是什么决定了大写字母是否应该出现在新字符串的小写字母前面?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-07 18:11:51

下面是一个方法,通过比较字符串中的字符索引(如果它们相等的话)来创建一个稳定的排序:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-06-07 18:00:03

根据@code 3483203的代码:

代码语言:javascript
复制
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()

编辑:实际上,这个解决方案并不适用于Codewar上的所有测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56499115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档