當我們使用 Function 處理 Array 時,常常最後一筆不是我們所要的,此時可用 init()
剔除之。
Version
macOS Catalina 10.15.2
VS Code 1.41.1
Quokka 1.0.274
Ramda 0.26.1
Imperative
let data = [1, 2, 3]
let init = arr => {
let result = []
for(let i = 0; i < arr.length; i++)
if (i !== arr.length -1)
result.push(arr[i])
return result
}
init(data) // ?
Imperative 會使用 for
loop,判斷當 index 不是最後一個 element 時,將 element push 進 result
。
slice()
let data = [1, 2, 3]
let init = arr => arr.slice(0, -1)
init(data) // ?
也可使用 Array.prototype
的 slice()
實現 init()
。
import { slice } from 'ramda'
let data = [1, 2, 3]
let init = slice(0)(-1)
init(data) // ?
也可使用 Ramda 的 slice()
實現 init()
。
Ramda
import { init } from 'ramda'
let data = [1, 2, 3]
init(data) // ?
Ramda 已經提供 init()
可直接使用。
init()
[a] -> [a]
取得不包含最後一筆的 array
[a]
:data 為 array
[a]
:回傳為 array
Application
import { split, pipe, init } from 'ramda'
let data = 'usr/local/bin/node/'
let fn = pipe(
split,
init
)
fn('/', data) // ?
init()
在實務上常與其他 function 組合使用,如 split()
將 string 轉成 array 時,因最後一個 /
會多出一個 element,可使用 init()
將其剔除。
Conclusion
init()
與dropLast(1)
等效,可交替使用