Обратный логический возврат функции в Ramda - PullRequest
0 голосов
/ 31 октября 2019

Я только начал изучать библиотеку Ramda и столкнулся с некоторой проблемой.

Допустим, у нас есть функция, которая принимает строку и список строк в качестве аргументов и возвращает true, если данная строка находится в списке. В строке 4 я хочу записать первый элемент из otherList, то есть , а не , включенный в list.

const isInList = R.curry((name: string, list: string[]) => list.some(elem => elem === name))
const list = ['a', 'b', 'c']
const otherList = ['a', 'b', 'd', 'c']
console.log(otherList.find(!isInList(R.__, list)))

Я не могу найти функцию Ramda, которая обратила бы логический результатданная функция.

Если бы она существовала, она бы выглядела примерно так:

const not = (func: (...args: any) => boolean) => (...args: any) => !func(args)

Тогда моя цель может быть заархивирована как:

console.log(otherList.find(not(isInList(R.__, list)))

Работает ли таксуществует в Рамде?

Ответы [ 3 ]

1 голос
/ 31 октября 2019

Попробуйте R.difference ():

const list = ['a', 'b', 'c']
const otherList = ['a', 'b', 'd', 'c']
R.difference(otherList, list); //=> ['d']

Демо онлайн здесь

1 голос
/ 31 октября 2019

R.complement - это способ отменить функцию

const isInList = R.includes;
const isNotInList = R.complement(isInList);

const list = ['Giuseppe', 'Francesco', 'Mario'];

console.log('does Giuseppe Exist?', isInList('Giuseppe', list));
console.log('does Giuseppe Not Exist?', isNotInList('Giuseppe', list));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js" integrity="sha256-xB25ljGZ7K2VXnq087unEnoVhvTosWWtqXB4tAtZmHU=" crossorigin="anonymous"></script>
1 голос
/ 31 октября 2019

Нашли это! Это называется R.complement()

...