请求排查Uncaught TypeError: Cannot read property 'start_time' of undefined错误
解决 "Cannot read property 'start_time' of undefined" 错误
嘿,我来帮你捋捋这个问题——你遇到的这个TypeError,本质是countsarray.find()在某些情况下返回了undefined,这时候你再去访问它的start_time属性就会炸锅。虽然你看到控制台输出了预期结果,但那只是部分成功场景的输出,报错的是那些没找到匹配元素的情况。
问题出在哪?
Array.find()这个方法的规则很明确:找到符合条件的元素就返回它,要是遍历完整个数组都没找到,就返回undefined。你的错误提示说明,在某个执行时刻,countsarray里根本没有元素满足x.start_time === currentLabel.start的条件,这时候countarray就是undefined,再去读它的属性当然会报错。
怎么修复?
核心就是在使用countarray的属性前,先判断它是否存在。给你改一下代码:
var countarray = countsarray.find(x => x.start_time === currentLabel.start); // 先确认找到元素了再继续 if (countarray) { console.log(countarray); console.log(countarray.start_time); console.log(countarray.count); console.log(parseInt(labelNumberString)); var labelint = parseInt(labelNumberString); var count1 = countarray.count; labelNumberCount = labelint - count1; } else { // 处理找不到的情况,避免代码崩溃 console.warn(`没找到start_time等于${currentLabel.start}的元素哦`); // 这里可以给labelNumberCount设个默认值,比如: // labelNumberCount = parseInt(labelNumberString) || 0; }
为啥控制台会有预期输出?
因为你测试的时候刚好碰到了能找到匹配元素的情况,但代码运行时肯定存在其他场景(比如currentLabel.start的值不在countsarray里),这时候就会触发错误。你可以加几行日志定位具体问题:
var countarray = countsarray.find(x => x.start_time === currentLabel.start); console.log('当前要匹配的start值:', currentLabel.start); console.log('完整的countsarray数组:', countsarray); if (countarray) { // 原有逻辑 } else { console.error('这里没找到匹配的元素!'); }
这样就能看到到底是哪个start值找不到对应元素,也能确认countsarray里的元素是不是你预想的那样。
内容的提问来源于stack exchange,提问作者LJR
相关产品推荐
相关产品推荐

