使用JavaScript的.find方法获取酋长队超级碗夺冠年份时代码失效的问题排查
嘿,我来帮你排查这段代码的问题!你想用find方法找出酋长队赢超级碗的年份,思路是对的,但有个关键细节没做好,导致代码跑不起来。
问题出在哪?
你的superbowlWin回调函数犯了两个小错误:
- 没有返回判断结果:
Array.find()需要回调函数返回一个布尔值(true/false)来识别符合条件的元素。你只写了array.result === 'W'做判断,但没把这个结果return出去,find自然找不到目标元素。 - 参数名容易混淆:函数参数
array其实接收的是数组里的单个对象元素,叫game或者entry会更直观,避免和整个数组搞混。
修复后的代码
const record = [ { year: "1971", result: "N/A"}, { year: "1970", result: "N/A"}, { year: "1969", result: "W"}, { year: "1968", result: "N/A"}, { year: "1967", result: "N/A"}, { year: "1966", result: "L"}, { year: "1965", result: "N/A"}, { year: "1964", result: "N/A"}, ]; function superbowlWin(game) { // 必须返回判断结果,让find知道当前元素是否符合条件 return game.result === 'W'; } // 调用find后会返回符合条件的对象,我们可以提取它的year属性 const winningYear = record.find(superbowlWin)?.year; console.log(winningYear); // 输出 "1969"
额外简化写法
如果不想单独定义函数,用箭头函数可以让代码更简洁:
const winningYear = record.find(game => game.result === 'W')?.year;
这里的?.是可选链操作符,能避免当没有找到获胜记录时出现Cannot read property 'year' of undefined的报错,让代码更健壮。
内容的提问来源于stack exchange,提问作者Mckennat33
相关产品推荐
相关产品推荐

