javascript - 自定义排序 JavaScript
问题描述
我希望自定义排序首先出现特殊字符,然后是数字,然后是大写字母和小写字母,我正在尝试使用 lodash 来实现相同的任何想法,我如何实现这一点。
输入 :
[{
name: '1'
}, {
name: 'A'
}, {
name: '#'
}, {
name: '6'
}, {
name: 'B'
}, {
name: 'a'
}, {
name: '0'
}, {
name: '3'
}];
输出 :
[
{ name: '#' },
{ name: '0' },
{ name: '1' },
{ name: '3' },
{ name: '6' },
{ name: 'A' },
{ name: 'a' },
{ name: 'B' },
];
<html>
<head>
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>
</head>
<script>
let input = [
{ name: '1' },
{ name: 'A' },
{ name: '#' },
{ name: '6' },
{ name: 'B' },
{ name: 'a' },
{ name: '0' },
{ name: '3' }];
const customSort = (a) => _.chain(_.partition(a, i => isNaN(i.name))).flatMap(p => _.sortBy(p, 'name')).value();
</script>
</html>
解决方案
试试这个,
x = [
{ name: '#' },
{ name: '0' },
{ name: '1' },
{ name: '3' },
{ name: '6' },
{ name: 'A' },
{ name: 'a' },
{ name: 'B' },
];
function calcSortAlg(str) {
let num = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
sym = ['@', '#', '$', '~', '`', '!', '%', '^', '&', '*', '(', ')', '_', '-', '=', '+', '|', '\\', '[', '{', '}', ']', '\'', '"', ';', ':', '<', '>', ',', '.'];
return str.split('').map(x => sym.includes(x) ? 2 : num.includes(x) ? 1 : 0).reduce((a, v) => a + v, 0);
}
x.sort((a, b) => calcSortAlg(b.name) - calcSortAlg(a.name))
输出,
[
{ name: '#' },
{ name: '0' },
{ name: '1' },
{ name: '3' },
{ name: '6' },
{ name: 'A' },
{ name: 'a' },
{ name: 'B' },
]
推荐阅读
- go - 为什么我的结构值在使用两个 goroutine 时在以下情况下不更新?
- visual-studio-code - 使用 Code Runner 我无法以任何编程语言运行程序
- javascript - 如何在 DataTables javascript 插件中输入表的链接?
- node.js - 如何创建一个可以导入和包装现有功能的 npm 包?
- javascript - Flask 区分不同的 post 请求
- java - 线程是在 wait() 之后唤醒并再次获得监视器从 wait() 之后的下一条指令继续还是从头开始?
- sql - SQL oracle下的日期
- css - CSS @keyframe, translateX() 和 rotateY() 在两端
- image - 引导模式图像是否在页面加载时加载?
- java - 每次测试单元功能后如何重置数据库?