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

prepareRidesData函数触发TypeError,请求问题排查与修复

问题分析与解决

错误原因定位

  • 核心触发点:调用prepareRidesData时未传入第二个必填参数parks,导致函数内parks变量为undefined,调用undefined.forEach()直接抛出TypeError。
  • 附带问题:原函数存在副作用(直接修改传入的rides数组元素),且未处理parks为空、park_name匹配失败等边界场景。

修复后的完整实现

优化后的prepareRidesData函数

function prepareRidesData(rides, parks = []) {
  // 校验输入合法性
  if (!Array.isArray(rides) || rides.length === 0) return [];
  if (!Array.isArray(parks)) return [...rides].map(ride => {
    delete ride.park_name;
    return ride;
  });

  // 构建公园名称到ID的映射表(过滤无效数据)
  const parksLookup = parks.reduce((map, { park_id, park_name }) => {
    if (park_name && park_id !== undefined) {
      map[park_name] = park_id;
    }
    return map;
  }, {});

  // 返回新数组,不修改原输入(避免副作用)
  return rides.map(ride => {
    const newRide = { ...ride };
    // 仅在匹配到有效park_id时添加字段
    if (newRide.park_name && parksLookup[newRide.park_name]) {
      newRide.park_id = parksLookup[newRide.park_name];
    }
    delete newRide.park_name;
    return newRide;
  });
}

修正后的测试代码

test("替换park_name为对应park_id", () => {
  // 补充缺失的公园映射数据
  const parks = [
    { park_name: "Thorpe Park", park_id: 1 },
    { park_name: "Alton Towers", park_id: 5 }
  ];

  const input = [
    {
      ride_name: "Tidal Wave",
      year_opened: 2000,
      park_name: "Thorpe Park",
      votes: 1,
    },
    {
      ride_name: "Nemesis",
      year_opened: 1994,
      park_name: "Alton Towers",
      votes: 5, // 修正原测试中错误的votes值
    }
  ];

  const actual = prepareRidesData(input, parks);

  const expected = [
    {
      ride_name: "Tidal Wave",
      year_opened: 2000,
      park_id: 1,
      votes: 1,
    },
    {
      ride_name: "Nemesis",
      year_opened: 1994,
      park_id: 5,
      votes: 5,
    }
  ];

  expect(actual).toEqual(expected);
});

关键优化说明

  • 参数容错:给parks设置默认空数组,同时校验输入是否为数组,避免非数组输入导致的崩溃。
  • 无副作用设计:通过对象展开{...ride}创建新对象,不修改原输入数组的元素,防止污染外部数据。
  • 边界处理:过滤无名称或ID的无效公园数据,匹配失败时不会添加无效的park_id字段。
  • 测试修正:补充了缺失的公园测试数据,修正了原测试中第二个条目错误的votes值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:40:37