點燈坊

學而時習之,不亦悅乎

Ramda 之 remove()

Sam Xiao's Avatar 2019-05-15

若要從 Array 擷取其中一部分,但我們無法如 slice() 指定要的部分,只能指定不要的部分,此時我們可使用 Ramda 的 remove()

Version

VS Code 1.33.1
Quokka 1.0.210
Ramda 0.26.1

Functional

import { slice, without } from 'ramda';

let data = [1, 2, 3, 4, 5];

// remove :: Number -> Number -> [a] -> [a]
let remove = start => count => arr => without(slice(start, start + count, arr), arr);

console.log(remove(1)(3)(data));

假如我們一開始不知道 Ramda 的 remove(),也可透過 slice()without() 組合:

  • 先使用 slice() 找出不要的部分
  • 再使用 without() 排除不要的部分

remove000

remove()

import { remove } from 'ramda';

let data = [1, 2, 3, 4, 5];

console.log(remove(1)(3)(data));

事實上 Ramda 已經內建 remove(),可直接使用。

remove()
Number → Number → [a] → [a]

直接指定 Array 中不要的部分擷取部分 Array

Number:Array 的 start index

Number:Array 的 element count

[a]:Data 為 array

[a]:回傳所截取的 array

remove002

Object

import { remove } from 'ramda';

let data = [
  { firstName: 'Sam',    lastName: 'Xiao'},
  { firstName: 'Kevin',  lastName: 'Yang'},
  { firstName: 'Jimmy',  lastName: 'Huang'},
  { firstName: 'Jessie', lastName: 'Hsieh'},
  { firstName: 'John',   lastName: 'Wu'}
];

console.dir(remove(1)(3)(data));

若 element 為 object,remove() 依然適用。

remove001

Conclusion

  • remove() 是與 slice() 相對的 function:slice() 是指定要的部分,而 remove() 是指定不要的部分

Reference

Ramda, remove()
Ramda, slice()
Ramda, without()