Discord.js数据库过滤后获取结果异常:返回undefined问题排查
问题分析与解决方案
问题现象
执行const efilter = mfilter.filter(data => data.value.closedBy)后打印efilter得到undefined,但已知mfilter包含带有非空closedBy字段的对象。
可能原因及解决步骤
IDD变量未正确赋值
代码中const IDD = discordsearchf,若discordsearchf未定义或其值与mfilter中creator字段('909068597089959976')不匹配,会影响mfilter的结果,需先验证:console.log('IDD:', IDD); // 确认值是否为'909068597089959976'createdAt类型不匹配导致的隐式转换问题
代码中用==比较数字类型的createdAt与字符串'1678356812821',虽==会自动转换类型,但建议用严格相等===避免意外:const mfilter = all.filter(data => data.value.creator === IDD && data.value.createdAt === 1678356812821);filter方法不会返回undefined——检查输出是否误判
数组的filter方法始终返回数组(空数组或匹配结果数组),绝不可能返回undefined。若控制台显示undefined,需确认:mfilter是否真为数组:在定义mfilter后立即打印console.log('mfilter:', mfilter)- 是否在
efilter定义后、打印前被重新赋值为undefined
明确
closedBy的判断条件
当前过滤条件data.value.closedBy依赖字符串的布尔值(非空字符串为true),可改为更明确的判断,覆盖null/undefined的情况:const efilter = mfilter.filter(data => typeof data.value.closedBy === 'string' && data.value.closedBy.length > 0);
验证代码示例
修改后的完整验证代码:
const IDD = discordsearchf; console.log('IDD:', IDD); const all = await client.db.all(); console.log('all tickets:', all.filter(data => data.id.startsWith("tickets_"))); const mfilter = all.filter(data => data.value.creator === IDD && data.value.createdAt === 1678356812821); console.log('mfilter:', mfilter); const efilter = mfilter.filter(data => typeof data.value.closedBy === 'string' && data.value.closedBy.length > 0); console.log('efilter:', efilter);
内容的提问来源于stack exchange,提问作者AminCoder
相关产品推荐
相关产品推荐

