點燈坊

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

使用 dropRepeats() 刪除 Array 連續重複資料

Sam Xiao's Avatar 2019-07-30

若允許 Array 內 Element 重複,但若連續重複只取一 Element 做代表,如此就不能使用 uniq(),只能使用 dropRepeats()

Version

Ramda 0.27.1

Primitive

import { pipe, dropRepeats } from 'ramda'

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

pipe(
  dropRepeats
)(data) // ?

想將 Array 中連續重複 element 刪除,Ramda 已經內建 dropRepeats() 可直接使用。

dropRepeats()
[a] -> [a]
回傳不連續重複的新 Array

[a]:data 為 Array

[a]:回傳不連續重複的新 Array

droprepeats000

Object

import { pipe, dropRepeats } from 'ramda'

let data = [
  { title: 'FP in JavaScript', price: 100 },
  { title: 'Elm in Action', price: 200 },
  { title: 'Elm in Action', price: 200 },
  { title: 'Speaking JavaScript', price: 300 },
  { title: 'FP in JavaScript', price: 100 },
  { title: 'FP in JavaScript', price: 100 },
]

pipe(
  dropRepeats
)(data) // ?

{ title: 'FP in JavaScript', price: 100 } 雖然出現過,但在最後又再次出現,一樣只取一筆。

執得注意的是 dropRepeats() 是以 Ramda 的 equals() 比較,而不是以 ECMAScript 的 === 比較 Object Reference,在實務上比較好用。

droprepeats001

Conclusion

  • dropRepeats()uniq() 很類似,但又不完全一樣
  • dropRepeats() 使用 equals() 比較,而非 ===

Reference

Ramda, dropRepeats()