Алгоритм фильтрации структуры данных И / ИЛИ / НЕ (аналогично реализации GraphQL) - PullRequest
0 голосов
/ 26 мая 2019

Я хочу реализовать структуру данных, которая обеспечивает мощную фильтрацию в моем приложении.

Самая близкая реализация, которую я нашел, взята из 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" }
  ]
}

Идея состоит в том, чтобы сравнить контекст с фильтрами и посмотреть, соответствует ли он.

В приведенном выше примере«context» - это объект с полями id, title и published.

Я ищу алгоритм, который бы выполнял сравнение и определял, соответствует ли он совпадению.

Поскольку я не смотрю на изобретение колеса заново (особенно потому, что это сложный алгоритмИМХО, так как условия И / ИЛИ / НЕ могут быть вложенными), мне интересно, если этот конкретный алгоритм уже существует или основан на каких-то стандартах (поскольку мы можем найти эту конкретную структуру данных в нескольких приложениях, таких как Prisma, PipeDriveи другие) .

Я ищу документацию, примеры реализации или даже реализации с открытым исходным кодом.(Я использую JS)

1 Ответ

1 голос
/ 27 мая 2019

Я также искал такую ​​реализацию, но не смог ее найти.

Поэтому я создал для нее прототип: https://github.com/Errorname/logical-object-match

...