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

JavaScript动态给嵌套对象添加键值对报undefined错误如何解决

报错原因
  • 核心问题是访问路径上的对象未提前初始化:初始结构里result.Furnaces是空对象,你直接链式访问result["Furnaces"][furnaceName]["Raw Material"]时,result["Furnaces"][furnaceName]这个节点根本不存在,JS读取不存在的对象属性会返回undefined,无法给undefined设置属性,就会抛出你看到的类型错误。
  • 额外还有个笔误:你循环里定义的遍历数组是furnaces,取元素时写的是furnace[i],变量名少写了末尾的s,就算提前初始化了子对象,这个拼写错误也会导致取到的熔炉名异常,触发同类报错。
  • 你之前给AV对象加键值对不报错,是因为你只访问了一层已存在的对象:result["AV"]本身就是初始化好的空对象,直接给它加一级属性是合法操作,不需要额外初始化。
正确实现方法

赋值前先检查路径上的子对象是否存在,不存在就先初始化为空对象,再往里写属性即可,修正后的完整代码如下:

const result = {
    AV: {},
    Furnaces: {},
    "Production Lines": {}
};
// 替换成你实际的熔炉名称列表即可
const furnaces = ["1号熔炉", "2号熔炉", "3号熔炉"];

for (let i = 0; i < furnaces.length; i++) { 
    // 修正原代码的变量拼写错误
    const furnaceName = furnaces[i];
    // 不存在对应熔炉的子对象时,先初始化空对象
    if (!result.Furnaces[furnaceName]) {
        result.Furnaces[furnaceName] = {};
    }
    // 子对象初始化完成后再赋值属性
    result.Furnaces[furnaceName]["Raw Material"] = 5;
}

执行后最终得到的result.Furnaces结构如下,完全符合动态新增子对象再加键值对的需求:

{
    "1号熔炉": { "Raw Material": 5 },
    "2号熔炉": { "Raw Material": 5 },
    "3号熔炉": { "Raw Material": 5 }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:54:42