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

嵌套for循环条件中变量修改:打印每日乐队列表遇TypeError报错

问题分析与修复

报错原因

  1. 对象属性访问方式错误:你用了midgard.whatDay[x],但whatDay是函数参数的数组,并非midgard对象的属性。通过变量访问对象属性时,必须使用方括号语法midgard[whatDay[x]],不能用点语法。
  2. 变量声明顺序问题:第一次调用playingWhen(whatDay)时,midgard还未定义(它在函数调用之后才声明),此时midgard为undefined,触发后续属性读取错误。
  3. 硬编码日期值:内层循环里固定写了midgard.mon[i].act,没有根据外层循环的日期动态切换,无法遍历所有日期的演出信息。

修复后的代码

const whatDay = ["mon", "tue", "wed"];

const midgard = {
  mon: [
    { start: "00:00", end: "02:00", act: "Barrows Group", cancelled: true },
    { start: "02:00", end: "04:00", act: "break" },
  ],
  tue: [
    { start: "00:00", end: "02:00", act: "Bartell - Cummerata", cancelled: true },
    { start: "02:00", end: "04:00", act: "break" },
  ],
  wed: [
    { start: "00:00", end: "02:00", act: "A Perfect Circle" },
    { start: "02:00", end: "04:00", act: "break" },
  ],
};

function playingWhen(whatDay) {
  for (let x = 0; x < whatDay.length; x++) {
    const currentDayShows = midgard[whatDay[x]];
    // 可选:打印当前日期,让输出结构更清晰
    console.log(`--- ${whatDay[x]} 的演出 ---`);
    for (let i = 0; i < currentDayShows.length; i++) {
      console.log(i, currentDayShows[i].act);
    }
  }
}

playingWhen(whatDay);

关键修改点

  • 将midgard.whatDay[x]改为midgard[whatDay[x]],通过变量动态访问对象的日期属性。
  • 把midgard的定义移到函数调用之前,确保函数执行时midgard已存在。
  • 用currentDayShows变量存储当前日期的演出数组,内层循环直接访问该变量,替换硬编码的mon为动态日期键。
  • 新增日期标题打印,让输出结构更清晰(可选)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:10:16