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

Javascript 如何使用lodash检查另一个数组中的数组值,javascript,lodash,graphql,Javascript,Lodash,Graphql,我的查询过滤器 export const resolvers = { Query: { allItems: (_, { value }) => getAllLinks() .then(result => filter(result, val => val.custom_attributes .find(customVal => customVal.att

我的查询过滤器

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中充当
条件。
例如,我有3个字段
首先

第二

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

参数中的变量是
[“3”]

因为我使用的是等质量函数,所以它只返回第三个字段。这是不正确的,因为
[“3”]
在所有三个字段中。lodash还有其他功能可以解决这个小问题吗?

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

对于
数组始终包含1个元素的简单情况,这两个选项都可以使用

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

选项1:字段必须包含任何值 如果由于在变量和
customVal.value
中至少找到了数组中的一项(
“3”
,因此希望获取所有3个字段,则应使用并检查结果是否为空数组。比如:

intersection(customVal.value, value).length > 0
difference(value, customVal.value).length === 0
如果在
customVal.value
value
中至少找到一项,则此表达式为真

选项2:字段必须包含所有值 在我的示例中,如果由于数组中的所有项都必须在变量和
customVal.value
中找到,您希望只得到第二个字段,那么您应该使用并检查结果是否为空数组。比如:

intersection(customVal.value, value).length > 0
difference(value, customVal.value).length === 0
在这种情况下,参数的顺序很重要。

如果在
customVal.value
中也找到
value
中的所有项,则此表达式为真。
customVal.value
中的其他值不会由
difference
返回,因为我们使用了
value
作为第一个参数


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

有两种不同的解决方案,具体取决于您想要实现的目标

对于
数组始终包含1个元素的简单情况,这两个选项都可以使用

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

选项1:字段必须包含任何值 如果由于在变量和
customVal.value
中至少找到了数组中的一项(
“3”
,因此希望获取所有3个字段,则应使用并检查结果是否为空数组。比如:

intersection(customVal.value, value).length > 0
difference(value, customVal.value).length === 0
如果在
customVal.value
value
中至少找到一项,则此表达式为真

选项2:字段必须包含所有值 在我的示例中,如果由于数组中的所有项都必须在变量和
customVal.value
中找到,您希望只得到第二个字段,那么您应该使用并检查结果是否为空数组。比如:

intersection(customVal.value, value).length > 0
difference(value, customVal.value).length === 0
在这种情况下,参数的顺序很重要。

如果在
customVal.value
中也找到
value
中的所有项,则此表达式为真。
customVal.value
中的其他值不会由
difference
返回,因为我们使用了
value
作为第一个参数


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

非常感谢您。选项1正是我现在所需要的,但我相信在不久的将来我也会使用选项2。非常感谢你们。选项1是我现在所需要的,但我确信在不久的将来我也会使用选项2。