在集合中搜索字符串始终返回-1,请求技术排查建议
兄弟,既然你确认auth.getUid()返回的"Ztg4GOqeucd6CqNAEokUe7eRHhY2"确实在集合里,那咱们从这几个方向挨个排查,大概率能找到问题:
先确认字符串的完全匹配性
很多时候看起来一模一样的字符串,藏着看不见的坑:比如有没有多余的空格、换行符?或者大小写不一致?你可以把auth.getUid()的返回值和集合里的目标UID都打印出来,甚至用length属性对比长度,或者用JSON.stringify()转成字符串看细节——比如有时候会有不可见的Unicode字符,肉眼根本分辨不出来。另外,手动写死这个UID去搜索集合,如果能成功,那说明auth.getUid()的返回值肯定和目标字符串有细微差异。检查搜索方法的使用是否正确
不同数据结构的搜索逻辑不一样:如果是JavaScript数组,indexOf()是严格相等(===)匹配,要是你用了findIndex()但回调函数写错了也会出问题;如果是数据库集合(比如Firestore),是不是把文档ID和字段搞混了?比如你要找的是字段里的UID,但查询的时候直接搜了文档ID?或者查询条件里的字段名写错了?排查异步加载的时序问题
要是你的集合数据是从数据库或者接口异步拉取的,会不会你执行搜索的时候,集合还没加载完?这时候集合是空的或者不完整,自然搜不到。可以在搜索前加个判断,确认集合数据已经就绪,或者把搜索逻辑放在异步请求的回调/await之后。确认集合有没有被意外修改
有没有其他代码在搜索之前,对集合做了过滤、排序或者删除操作?比如不小心用了filter()但没把结果赋值回去,或者排序的时候改变了元素位置?搜索前先打印整个集合的内容,确认目标UID确实在里面。测试最小化场景
写个最简单的测试代码:手动创建一个包含目标UID的集合,然后用auth.getUid()的返回值去搜索,看看结果怎么样。如果这个测试能成功,那问题肯定出在你原来的代码逻辑里;如果还是返回-1,那基本可以确定auth.getUid()的返回值有问题。
先试试这些方法,应该能定位到问题~
内容的提问来源于stack exchange,提问作者user2921885

