JavaScript数组查找对象后返回undefined问题排查
问题分析与解决方案
嘿,这问题我太熟啦!你遇到的tour输出undefined的核心原因是类型不匹配:
req.params.id从URL获取的参数默认是字符串类型,哪怕它看起来像数字;- 但你的
Tournament对象里的id是数字类型; - 你用了严格全等运算符
===,它会同时比较值和类型,所以字符串的"1592563085412"和数字的1592563085412会被判定为不相等,自然找不到匹配的对象。
解决方法
方法1:把req.params.id转换为数字(推荐)
这是最稳妥的方式,能避免隐式转换带来的潜在问题:
// 用Number()快速转换 let tour = tournaments.find(item => item.id === Number(req.params.id)); // 或者用parseInt(记得传入第二个参数10,表示十进制解析) let tour = tournaments.find(item => item.id === parseInt(req.params.id, 10));
方法2:使用松散相等运算符==(不推荐)
虽然能临时解决问题,但==会触发隐式类型转换,在复杂场景中容易引发意外bug,所以尽量避免:
let tour = tournaments.find(item => item.id == req.params.id);
你可以加一行代码验证类型差异:console.log(typeof req.params.id, typeof tournaments[0].id),就能看到一个是string,一个是number啦!
内容的提问来源于stack exchange,提问作者Karollo
相关产品推荐
相关产品推荐

