dropLast()
只能刪除 Array 固定最後幾筆資料,若想自行提供自訂條件 Predicate,就得使用 dropLastWhile()
。
Version
Ramda 0.27.1
Primitive
import { pipe, dropLastWhile } from 'ramda'
let data = [1, 2, 3, 4, 3, 2, 1]
pipe(
dropLastWhile(x => x <= 2)
)(data) // ?
想將 Array 中最後幾筆小於等於 2
的 element 刪除,Ramda 已經內建 dropLastWhile()
可直接使用。
dropLastWhile()
(a -> Boolean) → [a] → [a]
根據 predicate 刪除 Array 最後幾筆資料
(a -> Boolean)
:自訂條件 predicate
[a]
:data 為 Array
[a]
:回傳刪除 Array 最後幾筆資料後的剩餘 Array
Point-free
import { pipe, dropLastWhile, gte } from 'ramda'
let data = [1, 2, 3, 4, 3, 2, 1]
pipe(
dropLastWhile(gte(2))
)(data) // ?
也可將 x => x <= 2
進一步使用 gte(2)
使之 Point-free。
Object
import { pipe, dropLastWhile } from 'ramda'
let data = [
{ title: 'FP in JavaScript', price: 101 },
{ title: 'RxJS in Action', price: 203 },
{ title: 'Speaking JavaScript', price: 300 }
]
pipe(
dropLastWhile(x => x.price > 250)
)(data) // ?
dropLastWhile()
也能用在 Object。
Point-free
import { pipe, dropLastWhile, where, lte } from 'ramda'
let data = [
{ title: 'FP in JavaScript', price: 101 },
{ title: 'RxJS in Action', price: 203 },
{ title: 'Speaking JavaScript', price: 300 }
]
pipe(
dropLastWhile(where({ price: lte(250) }))
)(data) // ?
也可將 x => x.price > 250
進一步 Point-free:
where({ price: lte(250) })
:對price
property 使用lte(250)
判斷
Conclusion
dropWhle()
與dropLastWhile()
用法很類似,但dropWhile()
是刪除符合條件前 n 筆資料,而dropLastWhile()
是刪除符合條件最後 n 筆資料dropWhile()
除了用在 Array,也能用在 String