如何在JavaScript中结合大写和小写字母对字母进行排序?

2021/01/31 01:51 · jquery ·  · 0评论

我正在研究一种JavaScript(如果需要的话,jQuery也可以,但是我怀疑这样做)可以将字母字符串按字母顺序排列。假设我要排序的字符串是:“ ACBacb”。

到目前为止,我的代码是这样的:

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

这将返回ABCabc。我知道为什么会发生这种情况,但这不是我想要的格式。有没有办法我可以通过将相同的字母彼此相邻,大写字母放在首位来对它进行排序?因此,当我放入ACBacb时,会得到AaBbCc吗?

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

根据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('');

您可以将自定义比较功能传递给 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);
}

如果字母相同,则必须比较原件,而不是小写版本。大写字母始终比小写字母“大”。

演示(基于@Matt Ball的版本)

一个有效的示例http://jsfiddle.net/uGwZ3/

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

function caseInsensitiveSort(a, b)
{
   var ret = 0;
   a = a.toLowerCase();b = b.toLowerCase();
   if(a > b)
      ret = 1;
   if(a < b)
      ret = -1;
   return ret;
}

使用这样的自定义排序功能:

function customSortfunc(a,b){ 
  var lca = a.toLowerCase(), lcb = b.toLowerCase();
   return lca > lcb ? 1 : lca < lcb ? -1 : 0;

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

您可以在此处阅读有关排序功能的更多信息:https : //developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

当心:如果您localeCompare像其他答案一样使用,则建议“ u”和“ü”将作为同一字母排序,因为它忽略了所有变音符号。

另一个替换的基本示例,结合小写字母:D

   

<button onclick="myFunction('U')">Try it</button>

<p id="demo"></p>

<script>
function myFunction(val) {
    var str = "HELLO WORLD!";
    var res = str.toLowerCase().split("o");
    var elem = document.getElementById("demo").innerHTML
    for(i = 0; i < res.length; i++){
        (i > 0)?elem += val + res[i]:elem += res[i];
    }
}
</script>
本文地址:http://jquery.askforanswer.com/ruhezaijavascriptzhongjiehedaxiehexiaoxiezimuduizimujinxingpaixu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!