點燈坊

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

使用 range3() 產生含 Step 的 Sequence

Sam Xiao's Avatar 2019-10-16

Ramda 的 range() 只提供 beginend 兩個 Argument,但大部分 Library 還提供了第三個 Argument:step,我們也可以自行實作之。

Version

macOS Mojave 10.14.5
VS Code 1.36.1
Quokka 1.0.236
ECMAScript 2015
Wink-fp 0.1.13

Array.from()

let range3 = begin => end => step => Array.from({ length: (end - begin)/step + 1}, (_, i) => begin + (i * step));

range3(1)(10)(2); // ?

當牽涉 step 之後,array 的 length 就不只有 n,而是由 beginendstep 共同決定,且 map function 也包含 step

range000

Wink-fp

import { range3 } from 'wink-fp';

range3(1)(10)(2); // ?

Wink-fp 已經內建 range3(),可直接使用。

range3()
Number -> Number -> Number -> [Number]
提供起始值、結束值與 step 值產生 sequence

Number:起始值

Number:結束值

Number:step 值

[Number]:回傳 sequence

range001

Conclusion

  • 之前要實作 range() 沒這麼簡單,但透個 Array.from(),只要 1 行即可完成

Reference

MDN, Array.from()