如何在GraphQL中使用正则表达式检查数组

时间:2019-06-07 09:30:07

标签: reactjs graphql

我需要检查数组中某些元素的存在性

我有一个这样的数组

ar = ['一个','两个','三个']

我想知道如何单独检查下面的正则表达式代码中的元素,而不是通过数组映射并逐一检查在graphQL中是否存在的“ / something /”。

similar : allCockpitHello (filter: {Association : {value : {regex: "\/something/" }}} limit:2){
      nodes{
        Name{
          value
        }
}

2 个答案:

答案 0 :(得分:0)

GraphQL不是灵丹妙药,它只是一种查询语言,它可以将您的需求“传输”到进行所有必要处理的引擎(本地客户端,远程服务器...)。

在这种情况下,您可能需要将数组和表达式作为变量传递给服务器(解析器)。如果处理成本很高,则应该已经定义,缓存,预处理等结果(相似关系)。

如果数据集很小,则可以完全在客户端执行此操作-遍历数组(使用graphql获取)。

答案 1 :(得分:0)

您需要使用正则表达式字符串作为解析器要使用的输入参数,GraphQL不会为您做过滤器,您需要根据您的输入在解析器中执行/调用该逻辑。

根据您的示例,您可以在架构和解析器上找到类似的内容:

type Node {
   name: String!
}

type NodeQueries {
   nodes (filterRegEx :String): [Node]!
}

一旦您在解析器上输入了字符串,过滤器机制的实现就由您决定。

const resolvers = {
...
NodeQueries: {
    nodes: (parent, params) => {
      const {filterRegEx} = params; // regex input string

      const ar = ['one','two','three'];

      // Create a RegExp based on the input, 
      // Compare the with the elements in ar and store the result...
      // You might end up with ... res = ['one', 'three'];
      // Now map the result to match your schema:

      return _.map(res, name => ({name}) ); // to end up with [{name: 'one'}, {name: 'three'}]
    }
}
...

}