内容简介:將結果依日期排序,且最新日期在第一筆也是實務上常見需求,由於 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 日期和时间
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Jakarta Struts Cookbook中文版
斯格科 / 清华大学 / 2007-7 / 56.00元
Jakarta Struts Cookbook(中文版),ISBN:9787302155638,作者:(美)斯格科一起来看看 《Jakarta Struts Cookbook中文版》 这本书的介绍吧!
XML 在线格式化
在线 XML 格式化压缩工具
UNIX 时间戳转换
UNIX 时间戳转换