过滤数据结构的算法AND/OR/NOT(类似于GraphQL实现)

Algorithm to filter data structure AND/OR/NOT (similar to GraphQL implementation)

我想实现一个允许在我的应用程序中进行强大过滤的数据结构。

我发现最接近的实现来自 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" 将是一个具有 idtitlepublished 字段的对象。

我正在寻找一种算法来执行比较并确定它是否匹配。

因为我不打算重新发明轮子(特别是它是一个复杂的算法恕我直言,因为 AND/OR/NOT 条件可以嵌套),我想知道那个特定的算法是否已经存在,或者是基于一些标准 (因为我们可以在 Prisma、PipeDrive 等多个应用程序中找到特定的数据结构)

我正在寻找文档、实施示例甚至开源实施。 (我正在使用 JS)

我也在寻找这样的实现,但找不到。

所以我为它创建了一个原型:https://github.com/Errorname/logical-object-match

我们找不到符合我们要求的解决方案,因此构建了我们自己的解决方案并将其作为 OSS (MIT) 发布。

https://github.com/UnlyEd/conditions-matcher

Compares a given context with a filter (a set of conditions) and resolves whether the context validates the filter. Strongly inspired by GraphQL filters.