Как написать с функцией 2+ параметров в стиле без точек

1

Я пытаюсь реализовать эту точную функцию

const getItem = (items, id) => items.find(item => item.id === id);

в стиле point-free с использованием ramda.js.

Когда я использую что-то вроде этого:

const getItem = find(propEq('id'));

первые items параметров будут переданы для find функции, но мы потеряем второй параметр id.

Вопрос в том, как реализовать функцию getItem в стиле point-free?

Теги:
functional-programming
ramda.js
pointfree

1 ответ

3
Лучший ответ

Если вы можете изменить порядок аргументов функции, useWith является простым решением:

const getItemById = R.useWith(
  R.find,
  [R.propEq('id')]
);

console.log(
  getItemById(
    'b',
    [{ id: 'a' }, { id: 'b' }]
  )
);
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.24.0/ramda.min.js"></script>
  • 3
    И если вы хотите сохранить исходный порядок параметров, вы можете изменить его на R.useWith(R.flip(R.find), [R.identity, R.propEq('id')]) . Но в этот момент лямбда, вероятно, чище.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню