You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:52:30