GraphQL过滤函数未按指定条件筛选,返回全部数据问题
解决GraphQL查询过滤无效的问题
看起来你遇到的核心问题是过滤逻辑里的两个关键错误,导致Lodash的filter没有正确筛选条目。咱们一步步来修复:
1. 先揪出语法错误
你的代码里写了customVal.attribute_code =...——这里用的是赋值运算符=,而不是用来比较的严格相等运算符===。这会导致你每次过滤时都在修改attribute_code的值,而不是判断它是否匹配,这肯定没法正确筛选!
2. 修正嵌套过滤的逻辑
内层用filter会返回一个匹配的数组,Lodash的外层filter会把非空数组当作true,虽然能凑合用,但用some更高效直接——它会直接检查是否存在至少一个符合条件的custom_attribute项,不用生成额外数组。
修正后的完整解析器代码
export const resolvers = { Query: { allItems: (_, { value }) => getAllLinks() .then(result => filter(result, item => item.custom_attributes.some(customVal => customVal.attribute_code === value // 这里改成===,用some替代filter ) )) } };
额外优化建议
如果需要支持value为空时返回全部条目,可以加个简单判断:
export const resolvers = { Query: { allItems: (_, { value }) => getAllLinks() .then(result => { // 如果没有传value或者value为空,直接返回全部结果 if (!value) return result; // 否则执行过滤逻辑 return filter(result, item => item.custom_attributes.some(customVal => customVal.attribute_code === value ) ); }) } };
这样修改后,你的过滤逻辑就能正常工作,只会返回符合attribute_code匹配value参数的条目了。
内容的提问来源于stack exchange,提问作者Brunhilda
相关产品推荐
相关产品推荐

