Ramda 之 evolve()

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

内容简介:實務上在使用VS Code 1.31.1Quokka 1.0.136

實務上在使用 map() 時,經常是 Object 的 Key 不變,但 Value 稍作加工,此時當然可以使用 Callback Function,但也可使用 Ramda 的 evlove() 使 Callback Function 也 Point-free。

Version

VS Code 1.31.1

Quokka 1.0.136

Ramda 0.26.1

Non Point-free

import { map } from 'ramda'

const data = [
  { id: 1, title: 'Impatient JavaScript ', year: 2018 },
  { id: 2, title: ' RxJS in Action', year: 2017 },
  { id: 3, title: ' Speaking JavaScript ', year: 2014 },
]

const getBooks = map(x => ({
  id: x.id,
  title: x.title.trim(),
  year: x.year + 1,
}))

console.dir(getBooks(data))

對於原本的 data ,我們想做以下加工:

  1. title 字串前後可能有 space,需使用 trim() 加以過濾
  2. year 的數字全部加 1
  3. 其餘 property 全部保留

標準做法是使用 map() 搭配 callback function,但這有幾個缺點:

  1. 若 object 的 property 很多,而要改變的 property 很少,沒有改變的 property 也要照抄一次
  2. Callback function 並非 Point-free

Ramda 之 evolve()

Point-free

import { evolve, map, trim, add } from 'ramda'

const data = [
  { id: 1, title: 'Impatient JavaScript ', year: 2018 },
  { id: 2, title: ' RxJS in Action', year: 2017 },
  { id: 3, title: ' Speaking JavaScript ', year: 2014 },
]

const getBooks = map(evolve({
  'title': trim,
  'year': add(1),
}))

console.dir(getBooks(data))

evolve()

Object 在 key 不變的前提下,將 value 透過 transformation function 加以改變

{k: (v → v)} → {k: v} → {k: v}

{k: (v → v)} :Spec object,描述 object 該如何轉換,只要加上要改變的 key,與其對應的 transformation function 即可

{k: v} :要改變的 source object

{k: v} :改變結果的 target object

trim()add() 也一併使用 Ramda 所提供的 operator。

Ramda 之 evolve()

Conclusion

  • 使用 evolve() 可使 Point-free 過後的 callback 語意更清楚,而且 spec object 只要描述要改變的 property 即可

Reference

Ramda , map()

Ramda , evolve()

Ramda , trim()

Ramda , add()


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

查看所有标签

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

数据密集型应用系统设计

数据密集型应用系统设计

Martin Kleppmann / 赵军平、李三平、吕云松、耿煜 / 中国电力出版社 / 2018-9-1 / 128

全书分为三大部分: 第一部分,主要讨论有关增强数据密集型应用系统所需的若干基本原则。首先开篇第1章即瞄准目标:可靠性、可扩展性与可维护性,如何认识这些问题以及如何达成目标。第2章我们比较了多种不同的数据模型和查询语言,讨论各自的适用场景。接下来第3章主要针对存储引擎,即数据库是如何安排磁盘结构从而提高检索效率。第4章转向数据编码(序列化)方面,包括常见模式的演化历程。 第二部分,我们将......一起来看看 《数据密集型应用系统设计》 这本书的介绍吧!

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

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试