點燈坊

失くすものさえない今が強くなるチャンスよ

如何將 String 轉成 API 所需 Object ?

Sam Xiao's Avatar 2020-07-25

實務上很多資訊都來自於 String,但 API 要求的 Body 卻是 Object,所以由 String 轉成 Object 需求常常遇到,這該如何實現呢 ?

Version

Ramda 0.27.1

Data

'831669-Jacky-07-14.jpg'

String 包含 idnamebirthday 三項資訊。

{
  "id": "831619",
  "name": "Jacky"
}

但 API 僅需 Object 有 idname

zipObj()

import { pipe, split, take, zipObj } from 'ramda'

let data = '831669-Jacky-07-14.jpg'

pipe(
  split('-'),
  take(2),
  zipObj(['id', 'name'])
)(data) // ?

使用 pipe() 組合 IIFE:

  • **split()**:將 String 依 - 拆分成 Array
  • **take()**:由於 Object 只需 idname,因此只需取前兩筆即可
  • **zipObj()**:將兩 Array 合併成 Object,第一個 argument 為 key Array

zipobj000

Conclusion

  • 由 String 組合成 Object 看似很難,但只要能先組成 Array,可用的 function 就很多,最後再透過 zipObj() 將兩 Array 組合成 Object

Reference

Ramda, pipe()
Ramda, split()
Ramda, take()
Ramda, zipObj()