Ramda 之 uniqBy()

栏目: JavaScript · 发布时间: 7年前

内容简介:對於一般需求,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) 實現

Ramda 之 uniqBy()

import { uniq } from 'ramda';

let data = [1, 2, 3, 1];

console.log(uniq(data));

事實上 Ramda 已經提供 uniq() ,可直接使用。

uniq()

[a] -> [a]

回傳 element 不重複 array

Ramda 之 uniqBy()

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 都視為相同。

Ramda 之 uniqBy()

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 相同就視為相同。

Ramda 之 uniqBy()

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,可讀性更高。

Ramda 之 uniqBy()


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

查看所有标签

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

暗网

暗网

杰米·巴特利特 / 刘丹丹 / 北京时代华文书局 / 2018-7 / 59.00

全面深入揭秘“黑暗版淘宝”暗网的幕后世界和操纵者 现实中所有的罪恶,在暗网中,都是明码标价的商品。 暗杀、色情、恋童癖、比特币犯罪、毒品交易…… TED演讲、谷歌特邀专家、英国智库网络专家杰米•巴特利特代表作! 1、 被大家戏称为“黑暗版淘宝”的暗网究竟是什么?微信猎奇 文不能告诉你的真相都在这里了! 2、 因章莹颖一案、Facebook信息泄露危机而被国人所知的暗网......一起来看看 《暗网》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具