點燈坊

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

使用 zipWith() 實現 zip()

Sam Xiao's Avatar 2021-06-22

zip() 雖然可直接使用,但事實上也能使用 zipWith() 組合而成。

Version

Ramda 0.27.1

zipWith()

import { zipWith } from 'ramda'

let data1 = [1, 2, 3]
let data2 = [2, 4, 6]

let zip = zipWith ((x, y) => [x, y])

zip (data1) (data2) // ?

zip() 會將兩個 Array 合併成 Array Pair,可使用 (x, y) => [x, y] 傳入 zipWith() 實現。

zipwith000

Point-free

import { zipWith, pair } from 'ramda'

let data1 = [1, 2, 3]
let data2 = [2, 4, 6]

let zip = zipWith (pair)

zip (data1) (data2) // ?

事實上 (x, y) => [x, y] 就是 pair(),可使用 pair() 使傳入 zipWith() 的 function 也 Point-free。

zipwith001

Conclusion

  • Point-free 後可讀性更高,這正是 Point-free 優點

Reference

Ramda, zipWith()