如何在JavaScript中对字母进行排序,并将大写和小写字母组合在一起? [英] How do you sort letters in JavaScript, with capital and lowercase letters combined?
问题描述
我正在开发一个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屋!