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。