點燈坊

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

使用 init() 取得不包含最後一個 Char 的 String

Sam Xiao's Avatar 2020-01-29

當我們使用 Function 處理 String 時,常常最後一個 Char 不是我們所要的,此時可用 init() 剔除之。

Version

macOS Catalina 10.15.2
VS Code 1.41.1
Quokka 1.0.274
Ramda 0.26.1

Imperative

let data = 'let x = 1;'

let init = str => {
  let result = ''

  for(let i = 0; i < str.length; i++)
    if (i !== str.length -1)
      result += str[i]

  return result
}

init(data) // ?

let x = 1; 最後包含 ;,我們想將 ; 拿掉成為 let x = 1

Imperative 會使用 for loop,判斷當 index 不是最後一個 char 時,將 char +result

init000

slice()

let data = 'let x = 1;'

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

init(data) // ?

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

init001

import { slice } from 'ramda'

let data = 'let x = 1;'

let init = slice(0)(-1)

init(data) // ?

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

Ramda 的 slice() 可同時接受 array 或 string

init002

Ramda

import { init } from 'ramda'

let data = 'let x = 1;'

init(data) // ?

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

init()
String -> String
取得不包含最後一個 char 的 string

String:data 為 string

String:回傳為 string

init003

Conclusion

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

Reference

Ramda, init()