Ramda 之 uniqBy()
栏目: JavaScript · 发布时间: 6年前
内容简介:對於一般需求,VS Code 1.33.1Quokka 1.0.212
對於一般需求, uniq() 即可勝任,但若 Unique 條件太特殊,則要使用 uniqBy() ,自行傳入 Callback。
Version
VS Code 1.33.1
Quokka 1.0.212
Ramda 0.26.1
Functional
import { uniqBy, identity } from 'ramda';
let data = [1, 2, 3, 1];
let uniq = uniqBy(identity);
console.log(uniq(data));
data 很明顯 1 是重複的,我們希望結果只顯示 [1, 2, 3] 。
若我們不知道 uniq() ,也可以使用 uniqBy() 與 identity() 組合而成。
uniqBy()
(a -> b) -> [a] -> [a]
將 array 經過 supply function 轉換,回傳 element 不重複 array
(a -> b) :supply function,先經過轉換後再比較
[a] :data 為 array
[a] :回傳 element 不重複 array
事實上 Ramda 的 uniq() 就是由 uniqBy(identity) 實現
import { uniq } from 'ramda';
let data = [1, 2, 3, 1];
console.log(uniq(data));
事實上 Ramda 已經提供 uniq() ,可直接使用。
uniq()
[a] -> [a]
回傳 element 不重複 array
Primitive
import { uniqBy, identity } from 'ramda';
let data = [1, 2, 3, -1];
console.log(uniqBy(x => Math.abs(x), data));
若 1 與 -1 視為相同,我們希望結果只顯示 [1, 2, 3] 。
此時就不能再使用 uniq() ,因為條件太特殊,只能使用 uniqBy() 。
第 5 行
console.log(uniqBy(x => Math.abs(x), data));
自行提供 x => Math.abs(x) ,如此 1 與 -1 都視為相同。
Object
import { uniqBy } from 'ramda';
let data = [
{ title: 'FP in JavaScript', price: 100 },
{ title: 'RxJS in Action', price: 200 },
{ title: 'Speaking JavaScript', price: 300 },
{ title: 'FP in JavaScript', price: 400 }
];
console.dir(uniqBy(x => x.title)(data));
若 data 為 object,只要 title 相同就視為相同,也就是第一筆與第四筆,雖然 price 不同,但仍視為相同,我們希望結果只顯示不重複的前三筆。
此時就不能再使用 uniq() ,因為條件太特殊,只能使用 uniqBy() 。
第 10 行
console.dir(uniqBy(x => x.title)(data));
自行提供 x => x.title ,如此 object 只要 title 相同就視為相同。
Point-free
import { uniqBy, prop } from 'ramda';
let data = [
{ title: 'FP in JavaScript', price: 100 },
{ title: 'RxJS in Action', price: 200 },
{ title: 'Speaking JavaScript', price: 300 },
{ title: 'FP in JavaScript', price: 400 }
];
console.dir(uniqBy(prop('title'))(data));
x => x.title 也可由 prop() 產生使其 point-free,可讀性更高。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Don't Make Me Think
Steve Krug / New Riders Press / 18 August, 2005 / $35.00
Five years and more than 100,000 copies after it was first published, it's hard to imagine anyone working in Web design who hasn't read Steve Krug's "instant classic" on Web usability, but people are ......一起来看看 《Don't Make Me Think》 这本书的介绍吧!
Base64 编码/解码
Base64 编码/解码
SHA 加密
SHA 加密工具