javascript - 编写这种排序函数的更简洁的方法
问题描述
我想不出一种更简洁的方法来编写这个函数 - 我想要一个三元组,它根据 ASCENDING 或 DECENDING 的类型切换 > 但是你似乎不能这样做。显然是在重复自己,并且知道这不好,但现在想不出另一种方式。
name: ((studies, type) => {
let sortedStudies = studies;
if (type === 'ASCENDING') {
sortedStudies = studies.sort((a, b) => {
let nameA = a.name.toUpperCase();
let nameB = b.name.toUpperCase();
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
return 0;
});
} else {
sortedStudies = studies.sort((a, b) => {
let nameA = a.name.toUpperCase();
let nameB = b.name.toUpperCase();
if (nameA > nameB) {
return -1;
}
if (nameA < nameB) {
return 1;
}
return 0;
});
}
return sortedStudies
})
解决方案
这是我可以在不修改您的工作逻辑的情况下编写的最佳版本(除了我克隆数组以避免改变原始数组):
name: ((studies, type) => {
let sortedStudies = studies.slice(0);
if (type === 'ASCENDING')
return sortedStudies.sort((a, b) => {
let ans = a.name.toUpperCase() < b.name.toUpperCase() ? -1 : -2;
return ans === -1 ? ans : Number(a.name.toUpperCase() > b.name.toUpperCase());
});
return sortedStudies.sort((a, b) => {
let ans = a.name.toUpperCase() < b.name.toUpperCase() ? -1 : -2;
return ans === -1 ? ans : Number(a.name.toUpperCase() < b.name.toUpperCase());
});
})
推荐阅读
- php - 编辑 PHP MySQL 时未出现旧值
- ruby-on-rails - 我安装了 rails 6 beta,但无法启动示例应用程序
- excel - 日期的 Excel 公式,但不包括空单元格
- c# - 解析文本文件以获取数据的有效方法
- reactjs - 如何在 React 中为图像创建简单的旋转动画
- ios - UIWebview 中出现两个视频播放器
- python - 将两个字典放入单个字典
- android - Android XML:具有匹配父布局的 Android 中的垂直 Seekbar 无法正常工作
- java - cmake java 演示项目无法使用我的 MANIFEST.MF 创建“jar”
- c# - 类在控制器中没有无参数构造函数异常