javascript - JavaScript 中是否有 Array.Sort 的快捷方式?
问题描述
有没有办法让这行语法更短?
this.props.sortBy === 'newToOld' ?
posts.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()) :
posts.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime())
解决方案
只需创建一个比较器:
const sorter = (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
然后你可以为任何颠倒顺序的比较器创建一个通用的高阶修饰符:
const reverse = comparator => (a, b) => comparator(b, a);
与身份配对:
const identity = comparator => comparator;
您可以通过组合对排序进行建模:
const reverse = comparator => (a, b) => comparator(b, a);
const identity = x => x;
const sorter = (a, b) => new Date(a.date).getTime() - new Date(b.date).getTime();
function showSorting(items, sortBy) {
let modifier = identity;
if (sortBy === 'newToOld') {
modifier = reverse;
}
return items.sort(modifier(sorter));
}
const data = [
{date: "2020-03-19", name: "C"},
{date: "2020-01-19", name: "A"},
{date: "2020-04-19", name: "D"},
{date: "2020-02-19", name: "B"},
];
console.log("----------newToOld", showSorting(data, "newToOld"));
console.log("----------oldToNew", showSorting(data, "oldToNew"));
推荐阅读
- regex - 如何从 Postgres SELECT 将冒号插入 Mac 地址而不使用任何
- excel - 使用 worksheets.range 移动数据
- python - 线性回归 - 使用梯度方法的岭回归查找系数项的以下实现是否正确?
- c - 如何在 macOS 上使用 gcc 生成包含 C 源的程序集?
- php - 引导手风琴在 laravel 中无法动态正常工作
- html - 为什么加载器不能在 IE 浏览器中正确显示?
- python - Django - 如何将项目添加到 Bootstrap 下拉列表?
- r - 如何获取 r 数据框中描述中单词的超链接?
- django - Django 表单:如何使用 Html 和 css 模板表单
- php - 设置空 CURLOPT_POSTFIELDS