首页 > 解决方案 > Js自定义排序

问题描述

我正在尝试['d', 'CC', 'BB', 'b', 'a', 'Am','AMG'] 按这样的顺序对字符串数组进行排序["AMG", "Am", "a", "BB", "b", "CC", "d"]

使用

arr.sort(function (a, b) {
  return a.toLowerCase().localeCompare(b.toLowerCase());
});

我明白了["a", "Am", "AMG", "b", "BB", "CC", "d"]

标签: javascriptarrayssorting

解决方案


在交换字母的大小写之后,您可以链接一些排序标准,然后

  • 按第一个小写字符升序排序,
  • 按长度降序排序
  • 按字符串升序排序

function swap(s) {
    return Array.from(s, c => c.toUpperCase() === c ? c.toLowerCase() : c.toUpperCase()).join('');
}

var array = ['d', 'CC', 'BB', 'b', 'bb', 'a', 'Am', 'AMG'];

array.sort((a, b) => {
    var aa = swap(a),
        bb = swap(b);

   return a[0].toLowerCase().localeCompare(b[0].toLowerCase())
       || bb.length - aa.length
       || aa.localeCompare(bb);
});

console.log(array); // ["AMG", "Am", "a", "BB", "b", "CC", "d"]


推荐阅读