Я использую Ramda в качестве вспомогательной библиотеки для функционального программирования при создании приложения React.
Я пытаюсь построить себя whereAny
. Рамда выставляет where
, который проверяет, удовлетворяет ли каждый пропеллер, который ему дан, соответствующий предикат.
Я хочу создать функцию, которая принимает массив ключей, объект и поисковый термин, и если любой из ключей (значения которых являются строками) включает поисковый термин, он должен возвращать true
. Если нет, он должен вернуть false
.
Вот мой текущий обходной путь:
export const whereAny = keys => obj => searchTerm =>
R.any(
R.pipe(
R.toLower,
R.includes(R.toLower(searchTerm))
),
R.values(R.pick(keys, obj))
);
export const contactNameIncludesSearchValue = whereAny(['firstName', 'lastName']);
Как вы можете видеть, я использую его, чтобы увидеть, включают ли некоторые значения контакта поисковый термин (IRL я использую больше, чем просто firstName
и lastName
).
Мой вопрос: как вы можете создать такую функцию whereAny
? Я заглянул в кулинарную книгу Рамды и в Google и не смог найти рецепт для whereAny
.
Проблема с моим обходным решением (за исключением того факта, что он, вероятно, не оптимален), заключается в том, что вы не можете указать различные функции, как в where
. Так что в идеале мой API должен выглядеть так:
const pred = searchValue => R.whereAny({
a: R.includes(searchValue),
b: R.equals(searchValue),
x: R.gt(R.__, 3),
y: R.lt(R.__, 3)
});