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

使用JavaScript Array find方法报错:期望undefined等于'2015'

问题排查与修正

核心问题

你的函数设计和测试用例的预期不匹配,同时对Array.find()的回调逻辑理解存在偏差:

  • 测试用例期望superbowlWin是一个接收赛事记录数组作为参数、直接返回获胜年份的函数;
  • 但你写的superbowlWin是给find用的回调函数(接收单个数组元素为参数),导致测试调用时无法正确获取结果,返回undefined。

修正后的代码

调整superbowlWin函数,让它直接接收数组参数,内部用find完成匹配逻辑:

const record = [
{ year: "2018", result: "N/A"},
{ year: "2017", result: "N/A"},
{ year: "2016", result: "N/A"},
{ year: "2015", result: "W"},
{ year: "2014", result: "N/A"},
{ year: "2013", result: "L"},
{ year: "2012", result: "N/A"},
{ year: "2011", result: "N/A"},
{ year: "2010", result: "N/A"},
{ year: "2009", result: "N/A"},
{ year: "2008", result: "N/A"},
{ year: "2007", result: "N/A"},
{ year: "2006", result: "N/A"},
{ year: "2005", result: "N/A"},
{ year: "2004", result: "N/A"},
{ year: "2003", result: "N/A"},
{ year: "2002", result: "N/A"},
{ year: "2001", result: "N/A"},
{ year: "2000", result: "N/A"},
{ year: "1999", result: "N/A"},
{ year: "1998", result: "W"},
{ year: "1997", result: "W"},
{ year: "1996", result: "N/A"},
{ year: "1995", result: "N/A"},
{ year: "1994", result: "N/A"},
{ year: "1993", result: "N/A"},
{ year: "1992", result: "N/A"},
{ year: "1991", result: "N/A"},
{ year: "1990", result: "N/A"},
{ year: "1989", result: "L"},
{ year: "1988", result: "N/A"},
{ year: "1987", result: "L"},
{ year: "1986", result: "L"},
{ year: "1985", result: "N/A"},
{ year: "1984", result: "N/A"},
{ year: "1983", result: "N/A"},
{ year: "1982", result: "N/A"},
{ year: "1981", result: "N/A"},
{ year: "1980", result: "N/A"},
{ year: "1979", result: "N/A"},
{ year: "1978", result: "N/A"},
{ year: "1977", result: "N/A"},
{ year: "1976", result: "L"},
{ year: "1975", result: "N/A"},
{ year: "1974", result: "N/A"},
{ year: "1973", result: "N/A"},
{ year: "1972", result: "N/A"},
{ year: "1971", result: "N/A"},
{ year: "1970", result: "N/A"},
{ year: "1969", result: "N/A"},
{ year: "1968", result: "N/A"},
{ year: "1967", result: "N/A"},
{ year: "1966", result: "N/A"},
{ year: "1965", result: "N/A"},
{ year: "1964", result: "N/A"},
{ year: "1963", result: "N/A"},
{ year: "1962", result: "N/A"},
{ year: "1961", result: "N/A"},
{ year: "1960", result: "N/A"}
];

function superbowlWin(record) {
  // 用find找到结果为"W"的记录,回调返回布尔值判断匹配
  const winningEntry = record.find(entry => entry.result === "W");
  // 存在获胜记录则返回年份,否则返回undefined
  return winningEntry ? winningEntry.year : undefined;
}

// 调用示例
console.log(superbowlWin(record)); // 输出 '2015'

原代码的问题解析

  1. 回调函数逻辑不规范:find的回调函数应该返回布尔值(true/false)来标识当前元素是否符合条件,你返回年份字符串虽然能触发find的匹配(因为非空字符串是真值),但这不是标准写法,容易混淆逻辑。
  2. 函数职责不符预期:测试用例应该是直接调用superbowlWin(record)来获取年份,但你的函数只能作为find的回调使用,传入整个数组时,element.result不存在,函数返回undefined,导致断言失败。

内容的提问来源于stack exchange,提问作者McNaughty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:40:24