列举排序中的几种情况,然后逐个进行排序即可


const CHAR_CODE_a = 'a'.charCodeAt(0); // 97
const CHAR_CODE_A = 'A'.charCodeAt(0); // 65
const CHAR_CODE_z = 'z'.charCodeAt(0); // 112
const CHAR_CODE_Z = 'Z'.charCodeAt(0); // 90const diffLowerUpper = CHAR_CODE_a - CHAR_CODE_A;const isLower = (charCode) => {return CHAR_CODE_a <= charCode && charCode <= CHAR_CODE_z;
};
const isUpper = (charCode) => {return CHAR_CODE_A <= charCode && charCode <= CHAR_CODE_Z;
};
const ORDER = {KEEP : 1,EXCHANGE : -1,EQUAL : 0,
}
const A1Bigger = (isAsc) => {// 以降序的角度考虑,A1大,那么保持即可return isAsc ? ORDER.EXCHANGE : ORDER.KEEP;
};const A2Bigger = (isAsc) => {// 以降序的角度考虑,A2大,那么需要跟A1交换位置return isAsc ? ORDER.KEEP : ORDER.EXCHANGE;
};
/*** 比较 A2 字符串与 A1 字符串在第index位谁更大* 这里的排序规则为: a < A < b < B < c < C 与OfficeExcel保持一致* @param A2 * @param A1 * @param isAsc * @param index */
const excelStringCompare = (A2, A1, isAsc, index = 0) => {if(A2 === A1) {return ORDER.EQUAL}const charCodeA1 = A1.charCodeAt(index), charCodeA2 = A2.charCodeAt(index)// 两个字串相等情况以及处理,会有NaN一定是有一个长度大于另一个,而charCodeAt(index)等于NaN的就说明他的长度更短if(isNaN(charCodeA1)) {return A2Bigger(isAsc);} else if(isNaN(charCodeA2)) {return A1Bigger(isAsc);}// 都是小写或都是大写if ((isLower(charCodeA1) && isLower(charCodeA2)) || (isUpper(charCodeA1) && isUpper(charCodeA2))) {if (charCodeA2 < charCodeA1) {return A1Bigger(isAsc);}if (charCodeA2 > charCodeA1) {return A2Bigger(isAsc);}// 当两个字符串这个位相等的时候再比较下个位return excelStringCompare(A2, A1, isAsc, index + 1 )}//  A1 小写   A2 大写else if (isLower(charCodeA1) && isUpper(charCodeA2)) {// a - Aif (charCodeA1 - charCodeA2 === diffLowerUpper) {return A2Bigger(isAsc);} else {// c - (a - A) < D 即 (c - a = 2) < (D - A = 3)if (charCodeA1 - diffLowerUpper < charCodeA2) {return A2Bigger(isAsc);} else {return A1Bigger(isAsc);}}}// A1 大写   A2 小写else {// A - a === - (a - A)if (charCodeA1 - charCodeA2 === -diffLowerUpper) {return A1Bigger(isAsc);} else {// C + (a - A) < d 即 (C - A = 2) < (d - a = 3)if (charCodeA1 + diffLowerUpper < charCodeA2) {return A2Bigger(isAsc);} else {return A1Bigger(isAsc);}}}
};const isAsc = true;// 升降序let strArr = ['a','Ab', 'b', 'aB', 'A', 'B', 'ab', 'AB', 'c', 'D', 'd', 'C']strArr.sort((a, b) => {return excelStringCompare(a, b, isAsc)
})console.log(strArr)

排序结果:

如何自定义排序 aAbBcC 即Excel中的排序,AaBbCc相关推荐

  1. python给excel排序_Python实现EXCEL表格的排序功能示例

    Python实现EXCEL表格的排序功能示例 EXCEL的数值排序功能还是挺强大的,升序.降序,尤其自定义排序,能够对多个字段进行排序工作. 那么,在Python大法中,有没有这样强大的排序功能呢?答 ...

  2. java模拟excel排序_Apache-POI在excel中排序行

    要对行进行排序,您需要: 将所有行复制到temp 在temp中排序行 从工作表中删除所有行 使用temp中已排序行的值创建新行 public static void sortSheet(Workboo ...

  3. python excel表格排序_Python实现EXCEL表格的排序功能

    EXCEL的数值排序功能还是挺强大的,升序.降序,尤其自定义排序,能够对多个字段进行排序工作. 那么,在Python大法中,有没有这样强大的排序功能呢?答案是有的,而且本人觉得Python的排序功能, ...

  4. python给excel排序_Python实现EXCEL表格的排序功能

    EXCEL的数值排序功能还是挺强大的,升序.降序,尤其自定义排序,能够对多个字段进行排序工作. 那么,在Python大法中,有没有这样强大的排序功能呢?答案是有的,而且本人觉得Python的排序功能, ...

  5. mysql排序1 10 11_MySQL中的排序

    在编写SQL 语句时常常会用到 order by 进行排序,那么排序过程是什么样的?为什么有些排序执行比较快,有些排序执行很慢?又该如何去优化? 索引排序 索引排序指的是在通过索引查询时就完成了排序, ...

  6. python中的sort排序加换行_python中sort()排序的方法

    python中sort()排序的方法 发布时间:2020-09-01 10:57:52 来源:亿速云 阅读:110 作者:小新 这篇文章主要介绍了python中sort()排序的方法,具有一定借鉴价值 ...

  7. Poi 自定义封装方法 合并excel中的单元格

    之前都是使用sheet.addMergedRegion()方法一个一个计算合并单元格,还浪费大量时间,后来我自己特意封装了一个方法分享给大家,即拿即用,加几个就合并几个单元格方法.下面会给大家提供完整 ...

  8. python 操作excel排序_Python操作Excel之分组排序

    缘由:需要做一个信息统计,但是手头上的源数据先得杂乱无章, 就利用Python写一个依照某些内容对EXCEL分组排序的小脚本吧. 功能:依照工作表中的不同部分对整张表进行分组排序 #!/usr/bin ...

  9. python如何对excel排序_Python操作Excel之分组排序

    功能:依照工作表中的不同部分对整张表进行分组排序 #!/usr/bin/env python # --*-- coding:utf8 --*-- # Author: ZHangbb import op ...

最新文章

  1. 智能家居逐渐融入AI技术 向大众市场扩张仍需时间
  2. [saiku] 使用 Apache Phoenix and HBase 结合 saiku 做大数据查询分析
  3. RabbitMQ之安装windows
  4. MySQL内存----使用说明全局缓存+线程缓存) 转
  5. Rainmeter个人使用的插件
  6. ddm模型公式_绝对估值法DDM、DCF、RNAV模型简介
  7. Mac 移动硬盘没有推出,再插上不显示移动硬盘解决办法
  8. (算法)2048游戏
  9. Android游戏集成豌豆荚支付
  10. Http请求体被转义
  11. python列表用来有序存放一组_python 列表 元组(自兴人工智能)
  12. 基于boostrap的登录注册界面制作(html+css)
  13. php文本框添加表情,仿微信在对话框文字中插入Emoji表情包
  14. excel技巧:满足多个条件分项汇总求和
  15. 【转载】番茄时钟解说
  16. 使用Python和OpenCV标记超级像素的炫彩度
  17. python 开源cms内容管理系统_30 个很棒的 PHP 开源 CMS 内容管理系统
  18. Casinos and travel[智力和快速幂]
  19. LED:视展VSD控制卡网口闪烁不能访问
  20. 攻防世界 -- very_easy_sql

热门文章

  1. 搭建pixhawk飞控无人小车--前期准备
  2. 在apache中开启deflate方法的总结
  3. GCC-PHAT算法
  4. 文件服务器——NFS
  5. python ccf题解 201903-1 小中大
  6. 简单易懂的汉明码(海明码)校验原理
  7. linux 进程间通信 数据库,什么是进程间通信
  8. 链表详解(单链表、双向链表、链表逆序)
  9. live555 android,Android RTSP/UDP“RTSP/1.0 461 Unsupported transport”通过蜂窝网络(4G)
  10. Lance老师UI系列教程第三课-QQ登录注册界面的实现(android-2012最新版)