gpt4 book ai didi

javascript - Graphql 过滤器函数返回所有而不是指定的

转载 作者:行者123 更新时间:2023-11-30 14:41:08 27 4
gpt4 key购买 nike

我想通过提供参数来过滤 graphql 查询,但问题是即使在过滤器变量中指定了结果也是所有项目。我正在使用 lodash 中的函数。

这是我的过滤函数

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

对我来说最令人费解的是,如果我要添加

customVal.attribute_code === 'category_ids' && isEqual(customVal.value , value)
? console.log(customVal)
: null

log 会返回正确数量的对象。那是我的架构。

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]!

}
`;

感谢您的任何建议。

最佳答案

filter 函数迭代数组中的每个项目并返回一个包含过滤项目的新数组。如果找不到任何项目,则返回一个空数组。 空数组的计算结果为 truthy

在您的例子中,外部过滤器过滤链接(result)。将返回由外部过滤器函数评估为 truthy 的每个链接。外部过滤器函数使用内部过滤器的结果,它始终是一个数组,有时是一个空数组,但始终是一个 truthy 值(前提是没有抛出异常)。换句话说,外部过滤器函数将始终返回所有链接。

您的 console.log 确实正确地记录了项目,因为即使我们知道它对外部过滤器的结果没有影响,代码也会被执行。

一个可能的解决方案

如果您将对 val.custom_attributes.filter 的内部调用替换为 val.custom_attributes.find,则内部查找函数将返回 custom_attribute 是一个对象,因此 truthy 或者如果没有项目符合条件,它将返回 undefined 。由于 undefinedfalsy,因此外部过滤器函数不会在最终结果中返回没有相关自定义属性的项目。

关于javascript - Graphql 过滤器函数返回所有而不是指定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49649317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com