點燈坊

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

使用 tail() 取得不包含第一筆的 Array

Sam Xiao's Avatar 2020-01-31

當我們使用 Function 處理 Array 時,常常第一筆不是我們所要的,此時可用 tail() 剔除之。

Version

macOS Catalina 10.15.2
VS Code 1.41.1
Quokka 1.0.276
Ramda 0.26.1

Imperative

let data = [1, 2, 3]

let tail = arr => {
  let result = []

  for(let i = 0; i < arr.length; i++)
    if (i !== 0)
      result.push(arr[i])

  return result
}

tail(data) // ?

Imperative 會使用 for loop,判斷當 index 不是第一個 element 時,將 element push 進 result

tail000

slice()

let data = [1, 2, 3]

let tail = arr => arr.slice(1)

tail(data) // ?

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

tail001

import { slice } from 'ramda'

let data = [1, 2, 3]

let tail = slice(1)(Infinity)

tail(data) // ?

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

tail002

Ramda

import { tail } from 'ramda'

let data = [1, 2, 3]

tail(data) // ?

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

tail()
[a] -> [a]
取得不包含第一筆的 array

[a]:data 為 array

[a]:回傳為 array

tail003

Application

import { split, pipe, tail } from 'ramda'

let data = '/usr/local/bin/node'

let fn = pipe(
  split,
  tail
)

fn('/', data) // ?

tail() 在實務上常與其他 function 組合使用,如 split() 將 string 轉成 array 時,因第一個 /會多出一個 element,可使用 tail() 將其剔除。

tail004

Conclusion

  • tail()drop(1) 等效,可交替使用

Reference

Ramda, tail()