自行組合 sortByDate() 根據日期排序

栏目: 编程语言 · 发布时间: 6年前

内容简介:將結果依日期排序,且最新日期在第一筆也是實務上常見需求,由於 Date 特性,排序時並不像 Number、String 那樣簡單,須自行實作 Comparator Function,由於經常使用,可自行組出macOS Mojave 10.14.5VS Code 1.35.1

將結果依日期排序,且最新日期在第一筆也是實務上常見需求,由於 Date 特性,排序時並不像 Number、String 那樣簡單,須自行實作 Comparator Function,由於經常使用,可自行組出 sortByDate()

Version

macOS Mojave 10.14.5

VS Code 1.35.1

Quokka 1.0.227

Ramda 0.26.1

sort()

import { sort } from 'ramda';

let data = [
  { title: 'FP in JavaScript', release: '2016-06-18 07:43:14'},
  { title: 'RxJS in Action', release: '2017-08-04 03:24:18'},
  { title: 'Speaking JavaScript', release: '2017-03-24 17:08:39'}
];

// fn :: [a] -> [a]
let fn = sort(
  (x, y) => y.release - x.relase
);

console.dir(fn(data));

release 為各書的 發行日期 ,我們希望依發行日期 release 排序,且最新日期放在第一筆。

sort()

((a, a) → Number) → [a] → [a]

自行提供 comparator function 將 array 排序

(a, a) -> Number :自行提供 comparator function 比較

[a] :data 為 array

[a] :排序過後新 array

直覺會如處理 number 一樣,將兩數直接相減,但結果不如預期。

自行組合 sortByDate() 根據日期排序

發現根本沒有排序。

自行組合 sortByDate() 根據日期排序

Date.prototype.getTime()

import { sort } from 'ramda';

let data = [
  { title: 'FP in JavaScript', release: '2016-06-18 07:43:14'},
  { title: 'RxJS in Action', release: '2017-08-04 03:24:18'},
  { title: 'Speaking JavaScript', release: '2017-03-24 17:08:39'}
];

// fn :: [a] -> [a]
let fn = sort(
  (x, y) => new Date(y.release).getTime() - new Date(x.relase).getTime()
);

console.dir(fn(data));

使用 getTime() 轉成 number 後,就可以直接相減了。

自行組合 sortByDate() 根據日期排序

diff()

import { sort } from 'ramda';
import { diff } from 'date-fp';

let data = [
  { title: 'FP in JavaScript', release: '2016-06-18 07:43:14'},
  { title: 'RxJS in Action', release: '2017-08-04 03:24:18'},
  { title: 'Speaking JavaScript', release: '2017-03-24 17:08:39'}
];

// fn :: [a] -> [a]
let fn = sort(
  (x, y) => diff('seconds', new Date(x.release), new Date(y.release))
);

console.dir(fn(data));

若你不想轉成 number 相減,而想直接 date 相減,就要引入 date-fpdiff()

自行組合 sortByDate() 根據日期排序

Date.parse()

import { sort } from 'ramda';

let data = [
  { title: 'FP in JavaScript', release: '2016-06-18 07:43:14'},
  { title: 'RxJS in Action', release: '2017-08-04 03:24:18'},
  { title: 'Speaking JavaScript', release: '2017-03-24 17:08:39'}
];

// fn :: [a] -> [a]
let fn = sort(
  (x, y) => Date.parse(y.release) - Date.parse(x.release)
);

console.dir(fn(data));

也可以使用 Date.parse() 將 string 轉成 number 後相減。

自行組合 sortByDate() 根據日期排序

Point-free

import { sort, useWith, prop, pipe, subtract, flip } from 'ramda';

let data = [
  { title: 'FP in JavaScript', release: '2016-06-18 07:43:14'},
  { title: 'RxJS in Action', release: '2017-08-04 03:24:18'},
  { title: 'Speaking JavaScript', release: '2017-03-24 17:08:39'}
];

// fn :: [a] -> [a]
let fn = sort(useWith(
  flip(subtract), [
    pipe(prop('release'), Date.parse),
    pipe(prop('release'), Date.parse),
  ]
  )
);

console.dir(fn(data));

也可使用 useWith() 進一步將 sort() 的 callback 給 point-free。

自行組合 sortByDate() 根據日期排序

sortByDate()

import { sort } from 'ramda';

let data = [
  { title: 'FP in JavaScript', release: '2016-06-18 07:43:14'},
  { title: 'RxJS in Action', release: '2017-08-04 03:24:18'},
  { title: 'Speaking JavaScript', release: '2017-03-24 17:08:39'}
];

// sortByDate -> String -> [a] -> [a]
let sortByDate = date => sort(
  (x, y) => Date.parse(y[date]) - Date.parse(x[date])
);

console.dir(sortByDate('release')(data));

由於根據日期降冪 排序 在實務上經常使用,因此抽出 sortByDate() higher order function,只要傳入 property 名稱,即可回傳客製化的 sort() 繼續使用。

自行組合 sortByDate() 根據日期排序

Conclusion

  • 雖然根據日期排序的方法很多,但只要能重構出 sortByDate() higher order function,將來只要傳入 property 名稱就可簡單使用

Reference

Ramda , sort()

Ramda , useWith()

Ramda , prop()

Ramda , pipe()

Ramda , subtract()

Ramda , flip()

MDN , Date.prototype.getTime()

MDN , Date.parse()

date-fp , diff()


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Apache Tomcat 6高级编程

Apache Tomcat 6高级编程

Vivek Chopra、Sing Li、Jeff Genender / 人民邮电出版社 / 2009-3 / 79.00元

《Apache Tomcat 6高级编程》全面介绍了安装、配置和运行Apache Tomcat服务器的知识。书中不仅提供了配置选项的逐行分析,还探究了Tomcat的特性和功能,可以帮助读者解决出现在系统管理的各个阶段的各种问题,包括共享主机、安全、系统测试和性能测试及调优。 《Apache Tomcat 6高级编程》重点讲解Tomcat 6的应用知识。从基本的Tomcat和Web应用程序配置......一起来看看 《Apache Tomcat 6高级编程》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码