Я хочу реализовать структуру данных, обеспечивающую мощную фильтрацию в моем приложении.
Самая близкая реализация, которую я нашел, - это Prisma https://www.prisma.io/docs/1.27/prisma-graphql-api/reference/queries-qwe1/#combining-multiple-filters (которая на самом деле из спецификации GraphQL, насколько я понимаю)
Пример:
{
OR: [
{
AND: [
{ title_in: ["My biggest Adventure", "My latest Hobbies"] }
{ published: true }
]
}
{ id: "cixnen24p33lo0143bexvr52n" }
]
}
Идея состоит в том, чтобы сравнить контекст с фильтрами и посмотреть, совпадают ли они.
В приведенном выше примере «контекст» будет объектом с полями id, title и published.
Я ищу алгоритм, который бы выполнял сравнение и решал, совпадает это или нет.
Поскольку я не собираюсь изобретать велосипед (тем более, что это сложный алгоритм ИМХО, поскольку условия И/ИЛИ/НЕ могут быть вложенными), мне интересно, существует ли уже этот конкретный алгоритм или он основан на некоторых стандартах (поскольку мы можем найти эту конкретную структуру данных в нескольких приложениях, таких как Prisma, PipeDrive и других).
Я ищу документацию, примеры реализации или даже реализации с открытым исходным кодом. (я использую JS)





Я тоже искал такую реализацию, но не нашел.
Поэтому я создал для него прототип: https://github.com/Имя_ошибки/логический-объект-совпадение
Мы не смогли найти решение, соответствующее нашим требованиям, поэтому создали собственное и выпустили его как OSS (MIT).
https://github.com/UnlyEd/сопоставление условий
Compares a given context with a filter (a set of conditions) and resolves whether the context validates the filter. Strongly inspired by GraphQL filters.
Потрясающий! Мы также начали работать над нашей собственной реализацией, она еще не с открытым исходным кодом (я просматриваю ее прямо сейчас), но я вижу, что обе они похожи, но не предлагают одинаковые возможности. Мы постараемся выпустить наш в ближайшее время в открытом исходном коде, чтобы мы могли сравнить!