從一個 Object 中忽略部分 Property 成為新 Object

若要抽取 Object 的部分 Property,Ramda 提供了 pick();但若要抽取的是大部分 Property,可從反面思考,僅 忽略 部分的 Property,這就是 omit()

Version


VS Code 1.31.1
Quokka 1.0.136
Ramda 0.26.1

pick()


1
2
3
4
5
6
7
8
9
10
import { map, pick } from 'ramda';

const data = [
{ id: 1, title: 'Functional Programming in JavaScript', year: 2016 },
{ id: 2, title: 'RxJS in Action', year: 2017 },
{ id: 3, title: 'Speaking JavaScript', year: 2014 }
];

const getBooks = map(pick(['title', 'year']));
console.dir(getBooks(data));

pick() 傳入想要抽取的 property array,會回傳 map() 所需的 projection function。

使用 pick() 雖然直覺,但若大部分的 property 都要抽取,則 property array 會非常大。

pick()
[k] -> {k: v} -> {k: v}
從一個 object 中抽取部分 property 成為新 object

omit000

omit()


1
2
3
4
5
6
7
8
9
10
import { map, omit } from 'ramda';

const data = [
{ id: 1, title: 'Functional Programming in JavaScript', year: 2016 },
{ id: 2, title: 'RxJS in Action', year: 2017 },
{ id: 3, title: 'Speaking JavaScript', year: 2014 }
];

const getBooks = map(omit(['id']));
console.dir(getBooks(data));

omit()pick() 的 complement function,僅需提供不需要的 property array 即可,適合大部分 property 都要抽取的場合。

omit()
[String] → {String: *} → {String: *}
從一個 object 中忽略部分 property 成為新 object

[string]:要忽略的 property

{String: *}:data 為 object

{Strig: *}:回傳新的 object

omit001

Conclusion


  • pick()omit() 為互補,可視需求靈活運用

Reference


Ramda, pick()
Ramda, omit()