javascript - 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"]
解决方案
在交换字母的大小写之后,您可以链接一些排序标准,然后
- 按第一个小写字符升序排序,
- 按长度降序排序
- 按字符串升序排序
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"]
推荐阅读
- python - python中的索引错误,请帮助修复
- scheme - 为什么我的结果中会出现“列表”一词?
- c++ - Visual Studio 2019 使用 32 位 FileTracker 和 64 位工具集
- java - 我应该如何实例化列表
- > 在 Java 中
- kotlin - 使用 Kotlin 的地图委托同步对可变字段的访问
- javascript - 为什么videojs在空格键上切换全屏,切换播放/暂停
- angular - Angular 2+ NGXS:状态在指令中未定义,尽管状态为默认值
- javascript - Javascript/JSP 遍历 Datatable 并计算发生次数
- sql - 如何通过替换各种文本的字符串来更新 sql 记录文本?
- google-bigquery - 使用 Big Query 将 firebase event_params 键值数据显示到单行中