Zak*_*Zak 18 javascript jquery
我正在研究一个JavaScript(jQuery也可以,如果它需要它,但我怀疑它会)用于按字母顺序排列一串字母.假设我要排序的字符串是:"ACBacb".
我现在的代码是这样的:
var string='ACBacb';
alert(string.split('').sort().join(''));
Run Code Online (Sandbox Code Playgroud)
这将返回ABCabc.我可以看到为什么会发生这种情况,但这不是我要寻找的格式.有没有办法可以通过将相同的字母放在彼此旁边,首字母大写字母来对其进行排序?所以当我输入ACBacb时,我得到了AaBbCc?
Lek*_*eyn 26
Array.sort 可以将sort函数作为可选参数.
首先对字符串进行排序(ACBacbA变为AABCabc),然后将其排序为不区分大小写:
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);
Run Code Online (Sandbox Code Playgroud)
根据Felix的建议,第一个排序函数可以省略并合并到第二个排序函数中.首先,对两个字符进行不区分大小写的比较.如果它们相等,请检查它们区分大小写的等效项.返回-1或1表示差异,返回0表示相等.
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('');
Run Code Online (Sandbox Code Playgroud)
您可以将自定义比较功能传递给 Array.sort()
到目前为止,已经给出的答案是正确的,你必须使用自定义比较功能.但是,您必须在小写一次之前添加一个额外的步骤来对大写字母进行排序:
function cmp(x,y) {
if(x.toLowerCase() !== y.toLowerCase()) {
x = x.toLowerCase();
y = y.toLowerCase();
}
return x > y ? 1 : (x < y ? -1 : 0);
// or return x.localeCompare(y);
}
Run Code Online (Sandbox Code Playgroud)
如果字母相同,则必须比较原件,而不是小写版本.大写字母总是比小写字母"大".
DEMO(基于 @Matt Ball的版本)
| 归档时间: |
|
| 查看次数: |
37482 次 |
| 最近记录: |