點燈坊

學而時習之,不亦悅乎

使用 omit() 忽略 Object 部分 Property

Sam Xiao's Avatar 2019-09-08

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

Version

macOS Mojave 10.14.6
VS Code 1.31.1
Quokka 1.0.136
Ramda 0.26.1

pick()

import { map, pick } from 'ramda';

let data = [
  { id: 1, title: 'FP in JavaScript', price: 100 },
  { id: 2, title: 'RxJS in Action', price: 200 },
  { id: 3, title: 'Speaking JavaScript', price: 300 }
];

let fn = map(pick(['title', 'price']));

console.dir(fn(data));

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

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

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

omit000

omit()

import { map, omit } from 'ramda';

let data = [
  { id: 1, title: 'FP in JavaScript', price: 100 },
  { id: 2, title: 'RxJS in Action', price: 200 },
  { id: 3, title: 'Speaking JavaScript', price: 300 }
];

let fn = map(omit(['id']));

console.dir(fn(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()