點燈坊

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

使用 take() 取得 Array 前幾筆資料

Sam Xiao's Avatar 2020-11-03

若只想取 Array 前幾筆資料,Ramda 提供了 take()

Version

Ramda 0.27.1

Imperative

let data = [1, 2, 3]

let take = n => a => {
  let result = []
  let i = 0

  for (let x of a) {
    if (i < n) {
      result = [...result, x]
    }
    else
      return result

    i++
  }
}

take(2)(data) // ?

建立 take(),imperative 會使用 for loop,並先建立好回傳的 result Array,當 i 小於 n 時,x 會塞進回 result,當大於等於 n 時,則回傳 result 結束執行。

take000

Array.prototype.slice()

let data = [1, 2, 3]

let take = n => arr => arr.slice(0, n)

take(2)(data) // ?

Array.prototype 提供了 slice(),也可取得前幾筆資料。

take004

take()

import { slice } from 'ramda'

let data = [1, 2, 3]

let take = slice(0)

take(2)(data) // ?

Ramda 也提供了 slice(),也可取得前幾筆資料。

take001

Ramda

import { take } from 'ramda'

let data = [1, 2, 3]

take(2)(data) // ?

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

take()
Number -> [a] -> [a]
取得 Array 中的前 n 筆資料

Number:前 n 筆

[a]:data 為 Array

[a]:回傳前 n 筆資料的新 Array

take002

Object

import { take } from 'ramda'

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

take(2)(data) // ?

take() 也可用在 object。

take003

Conclusion

  • take() 也可使用 slice() 實現
  • take() 不只用在 Array,也可於用於 String

Reference

Ramda, slice()
Ramda, take()