繁体   English   中英

如何使用lodash检查另一个数组中的数组值

[英]How to check for array values in another array with lodash

我的查询过滤器

export const resolvers = {
    Query: {
        allItems: (_, { value }) => getAllLinks()
            .then(result => filter(result, val => val.custom_attributes
                .find(customVal =>
                    customVal.attribute_code === 'category_ids' && isEqual(customVal.value, value)
                )
                )),
    },

我的架构

const typeDefs = `
    type Item  {
        id: ID!
        name: String
        price: Float
        custom_attributes: [CUSTOM_ATTRIBUTES]
    }

    union CUSTOM_ATTRIBUTES = CustomString | CustomArray 

   type CustomString {
    attribute_code: String
    value: String
  }

  type CustomArray {
    attribute_code: String
    value: [String]

  } 

  type Query {
    allItems(value : [String]): [Item]!

  }
`; 

就目前而言(我认为),我的过滤器在mysql中可作为AND条件使用。
例如,我有3个字段
第一

{
 value: ["3", "5"]
}

第二

{
 value: ["3", "5", "7"]
}

第三

{
 value: ["3"]
}

我在参数中的变量是["3"]因为我使用的是isEqual函数,它将仅返回第三个字段。 这是不正确的,因为在所有三个字段中都包含["3"] lodash是否有另一个函数可以解决此小问题?

根据要实现的目标,有两种不同的解决方案。

对于value数组始终包含1个元素的简单情况,这两个选项都将起作用。

我将使用此参数来显示差异: ["3", "7"]

选项1:字段必须包含任何值

如果您希望获得所有3个字段,因为在变量和customVal.value找到了数组中的至少一项(本例中为"3" ),则应使用lodash的交集并检查结果是否不是空数组。 就像是:

intersection(customVal.value, value).length > 0

如果在customVal.valuevalue都找到至少一项,则此表达式为true。

选项2:字段必须包含所有值

如果在我的示例中您希望获取第二个字段,因为必须在变量和customVal.value找到数组中的所有项目,则应使用lodash的差值并检查结果是否为空数组。 就像是:

difference(value, customVal.value).length === 0

在这种情况下,参数的顺序很重要。

如果还在customVal.value找到所有 value项目,则此表达式为true。 customVal.value其他值不会因difference而返回,因为我们使用value作为第一个参数。

(也可以通过intersection并将结果的长度与参数的数组长度进行比较来实现此选项)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM