點燈坊

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

使用 drop() 刪除 String 前幾個 Char

Sam Xiao's Avatar 2019-07-28

實務上常遇到中間 String 符合預期,但前面 String 不符合規格,此時可用 drop() 加以刪除。

Version

macOS Mojave 10.14.5
VS Code 1.36.1
Quokka 1.0.236
Ramda 0.26.1

Imperative

let data = 'FP in JavaScript';

// drop :: Number -> String -> String
let drop = n => str => {
  let result = '';
  let i = 0;

  for(let elm of str) {
    if (i >= n)
      result = result + elm;

    i++;
  }

  return result;
};

drop(6)(data); // ?

建立 drop(),imperative 會使用 for loop,並先建立好回傳的 result string,當 i 大於等於 n 時,elm 會與 result 合併,最後回傳 result 結束執行。

drop000

Functional

import { slice } from 'ramda';

let data = 'FP in JavaScript';

// drop :: Number -> String -> String
let drop = n => slice(n, Infinity);

drop(6)(data); // ?

drop() 也可使用 slice() 實現。

drop001

Point-free

import { slice, flip } from 'ramda';

let data = 'FP in JavaScript';

// drop :: Number -> String -> String
let drop = flip(slice)(Infinity);

drop(6)(data); // ?

若要將 drop() point-free,可先將 slice() 使用 flip() 翻轉,使 n 成為最後一個 argument。

drop002

import { slice, __ } from 'ramda';

let data = 'FP in JavaScript';

// drop :: Number -> String -> String
let drop = slice(__, Infinity);

drop(6)(data); // ?

也可使用 __ 取代 flip()

drop003

Ramda

import { drop } from 'ramda';

let data = 'FP in JavaScript';

drop(6)(data); // ?

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

drop()
Number -> String -> String
刪除 string 前幾個 char 並回傳

Number:前 n 個 char

String:data 為 string

String:回傳刪除前 n 個 char 後剩餘 string

drop004

Conclusion

  • drop() 也可使用 slice() 實現
  • drop() 不只用在 string,也能用於 array

Reference

Ramda, slice()
Ramda, drop()