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

使用jQuery构建含动态键的嵌套Object/Array 解决读取undefined报错

问题原因

JavaScript 不会自动为你创建嵌套对象/数组的中间层级,你代码中直接访问fieldTickets[thisWeek]时,该动态键对应的值还未初始化,结果为undefined,此时再尝试读取它的days属性就会触发你遇到的报错。
另外注意:如果你的动态键thisWeek是日期字符串等非数字类型,fieldTickets应该声明为普通对象{}而非数组[],数组仅适合用数字作为索引的场景。

正确实现方案

你需要在访问深层属性前,逐层初始化所有中间层级的对象/数组:

兼容所有运行环境的写法

// 顶层用对象存储非数字索引的周次数据
const fieldTickets = {};
const thisWeek = randomDateOnSunday;
const weekDay = randomWeekDayWithinTheWeek;
const fieldTechName = '你从表单获取的技术人员名称';

// 初始化周次层,不存在则创建带days属性的对象
if (!fieldTickets[thisWeek]) {
  fieldTickets[thisWeek] = {
    days: {}
  };
}

// 初始化工作日层,不存在则创建带fieldTechs空数组的对象
if (!fieldTickets[thisWeek].days[weekDay]) {
  fieldTickets[thisWeek].days[weekDay] = {
    fieldTechs: []
  };
}

// 此时所有层级都已初始化,可以安全push数据
fieldTickets[thisWeek].days[weekDay].fieldTechs.push({name: fieldTechName});

ES2020+ 简洁写法

如果你的运行环境支持ES2020及以上语法(现代浏览器、Node.js 15+),可以用空值合并赋值运算符简化初始化逻辑:

const fieldTickets = {};
const thisWeek = randomDateOnSunday;
const weekDay = randomWeekDayWithinTheWeek;
const fieldTechName = '你从表单获取的技术人员名称';

// 逐层兜底初始化,属性不存在时才会赋值
fieldTickets[thisWeek] ??= { days: {} };
fieldTickets[thisWeek].days[weekDay] ??= { fieldTechs: [] };

fieldTickets[thisWeek].days[weekDay].fieldTechs.push({name: fieldTechName});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:24:03