首页 > 解决方案 > 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())

标签: javascriptreactjs

解决方案


只需创建一个比较器:

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"));


推荐阅读