过滤数据结构的算法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" 将是一个具有 id
、title
和 published
字段的对象。
我正在寻找一种算法来执行比较并确定它是否匹配。
因为我不打算重新发明轮子(特别是它是一个复杂的算法恕我直言,因为 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.
我想实现一个允许在我的应用程序中进行强大过滤的数据结构。
我发现最接近的实现来自 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
字段的对象。
我正在寻找一种算法来执行比较并确定它是否匹配。
因为我不打算重新发明轮子(特别是它是一个复杂的算法恕我直言,因为 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.