點燈坊

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

使用 init() 取得不包含最後一筆的 Array

Sam Xiao's Avatar 2020-01-28

當我們使用 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

init000

slice()

let data = [1, 2, 3]

let init = arr => arr.slice(0, -1)

init(data) // ?

也可使用 Array.prototypeslice() 實現 init()

init001

import { slice } from 'ramda'

let data = [1, 2, 3]

let init = slice(0)(-1)

init(data) // ?

也可使用 Ramda 的 slice() 實現 init()

init002

Ramda

import { init } from 'ramda'

let data = [1, 2, 3]

init(data) // ?

Ramda 已經提供 init() 可直接使用。

init()
[a] -> [a]
取得不包含最後一筆的 array

[a]:data 為 array

[a]:回傳為 array

init003

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() 將其剔除。

init004

Conclusion

  • init()dropLast(1) 等效,可交替使用

Reference

Ramda, init()