如何在JavaScript中对字母进行排序,并将大写和小写字母组合在一起? [英] How do you sort letters in JavaScript, with capital and lowercase letters combined?

查看:518
本文介绍了如何在JavaScript中对字母进行排序,并将大写和小写字母组合在一起?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个JavaScript(jQuery也可以,如果它需要它,但我怀疑它会)用于按字母顺序排列一串字母。假设我要排序的字符串是:ACBacb。

I'm working on a JavaScript (jQuery's OK too if this needs it, but I doubt it will) function to alphabetize a string of letters. Let's say the string that I want to sort is: "ACBacb".

我现在的代码是:

var string='ACBacb';
alert(string.split('').sort().join(''));

这将返回ABCabc。我可以看到为什么会发生这种情况,但这不是我要寻找的格式。有没有办法可以通过将相同的字母放在彼此旁边,首字母大写字母来对其进行排序?所以,当我输入ACBacb时,我得到AaBbCc?

This returns ABCabc. I can see why that happens, but that is not the format that I am looking for. Is there a way that I can sort it by putting the same letters next to each other, capital letter first? So when I put in ACBacb, I get AaBbCc?

推荐答案

Array.sort 可以将sort函数作为可选参数。

Array.sort can have a sort function as optional argument.

首先对字符串进行排序(ACBacbA变为AABCabc),然后将其排序为不区分大小写:

What about sorting the string first (ACBacbA becomes AABCabc), and then sorting it case-insensitive:

function case_insensitive_comp(strA, strB) {
    return strA.toLowerCase().localeCompare(strB.toLowerCase());
}

var str = 'ACBacbA';
// split the string in chunks
str = str.split("");
// sorting
str = str.sort();
str = str.sort( case_insensitive_comp )
// concatenate the chunks in one string
str = str.join("");

alert(str);

根据Felix的建议,第一个排序函数可以省略并合并到第二个排序函数中。首先,对两个字符进行不区分大小写的比较。如果它们相等,请检查它们区分大小写的等效项。返回-1或1表示差异,零表示相等。

As per Felix suggestion, the first sort function can be omitted and merged in the second one. First, do a case-insensitive comparison between both characters. If they are equal, check their case-sensitive equivalents. Return -1 or 1 for a difference and zero for equality.

function compare(strA, strB) {
   var icmp = strA.toLowerCase().localeCompare(strB.toLowerCase());
   if (icmp != 0) {
       // spotted a difference when considering the locale
       return icmp;
   }
   // no difference found when considering locale, let's see whether
   // capitalization matters
   if (strA > strB) {
       return 1;
   } else if (strA < strB) {
       return -1;
   } else {
       // the characters are equal.
       return 0;
   }
}
var str = 'ACBacbA';
str = str.split('');
str = str.sort( compare );
str = str.join('');

这篇关于如何在JavaScript中对字母进行排序,并将大写和小写字母组合在一起?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆