Рамда, отправь аргументы в функции - PullRequest
0 голосов
/ 17 мая 2019
const product = {
  name: 'widget',
  price: 10,
  avgRating: 4.5,
  shippingWeight: '2 lbs',
  shippingCost: 2,
  shippingMethod: 'UPS'
}

const getProps = R.pick(['name', 'price'])
const result = getProps(product) // {name: 'widget', price: 10}

В моем getProps я хотел бы отправить ключи (имя и цену) динамически.

Что-то вроде

const getProps = args => R.pick([..args]);
const result = getProps(['name', 'price'], product); 

не работает.

Как мне это сделать?

https://plnkr.co/edit/MHv5AMEO3p9dxiNCvQ80?p=preview

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

При выборе вы не прошли объект должным образом ( согласно документации R.pick ).

Вы можете сделать это так:

const product = {
  name: 'widget',
  price: 10,
  avgRating: 4.5,
  shippingWeight: '2 lbs',
  shippingCost: 2,
  shippingMethod: 'UPS'
}

const getProps = (obj, propsArr) => R.pick(obj, propsArr)

console.log(getProps(['name','price'], product))
console.log(getProps(['avgRating','shippingMethod'], product))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>

Или вы можете уничтожить переданные параметры следующим образом:

const product = {
  name: 'widget',
  price: 10,
  avgRating: 4.5,
  shippingWeight: '2 lbs',
  shippingCost: 2,
  shippingMethod: 'UPS'
}

const getProps = (...args) => R.pick(...args)

console.log(getProps(['name','price'], product))
console.log(getProps(['shippingCost','shippingMethod'], product))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
0 голосов
/ 17 мая 2019

Методы Ramda каррируются, что означает, что всякий раз, когда число аргументов меньше, чем арность (число параметров, ожидаемых функцией), возвращается новая функция. Поэтому, если функция исключает fn (a, b, c), при карри можно сделать fna = fn(a), fnab = fna(b) и т. Д. *

В отличие от классического карри, в ramda вы также можете передать несколько аргументов - fnab = fn(a, b).

То, что вы хотите, уже является стандартным способом работы R.pick. Он может быть вызван с одним аргументом и вернуть функцию, которая ожидает другой, или вы можете вызвать ее со всеми аргументами одновременно и получить результат.

const product = {
  name: 'widget',
  price: 10,
  avgRating: 4.5,
  shippingWeight: '2 lbs',
  shippingCost: 2,
  shippingMethod: 'UPS'
}

const getProps = R.pick

console.log(getProps(['name','price'], product))
console.log(getProps(['shippingCost','shippingMethod'], product))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
...