内容简介:將結果依日期排序,且最新日期在第一筆也是實務上常見需求,由於 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 一樣,將兩數直接相減,但結果不如預期。
發現根本沒有排序。
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 後,就可以直接相減了。
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-fp
的 diff()
。
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 後相減。
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()
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()
繼續使用。
Conclusion
- 雖然根據日期排序的方法很多,但只要能重構出
sortByDate()
higher order function,將來只要傳入 property 名稱就可簡單使用
Reference
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
- AYUI内置的万能日期控件-日期表达式
- oracle 日期格式化(yyyymmdd)及常规日期计算大全
- ElasticSearch中的日期映射为Hive中的日期格式
- 将日期时间列表与Python中的日期时间进行比较
- Python 日期和时间
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Little Prover
Daniel P. Friedman、Carl Eastlund / The MIT Press / 2015-7-10 / USD 38.00
[FROM www.amazon.com]: The Little Prover introduces inductive proofs as a way to determine facts about computer programs. It is written in an approachable, engaging style of question-and-answer, wi......一起来看看 《The Little Prover》 这本书的介绍吧!