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

访问malzeme.aciklama触发TypeError,已定义对象仍返回undefined

解决TypeError: Cannot read properties of undefined (reading 'aciklama')问题

错误根源分析

你的报错出现在这行代码:

let malzeme_id = dataLogo[dataLogo.indexOf(dataLogo.find(item => item.malzeme_id === element.id))].aciklama;

核心问题有两个:

  • 当dataLogo.find(item => item.malzeme_id === element.id)找不到匹配项时,会返回undefined,此时dataLogo.indexOf(undefined)返回-1,dataLogo[-1]为undefined,再访问.aciklama必然抛出TypeError。
  • 目标对象中malzeme是包含aciklama属性的对象,但你的代码把newObj.malzeme赋值成了字符串类型的aciklama值,后续尝试访问malzeme.aciklama时,字符串没有该属性,自然返回undefined。

修复方案

1. 安全处理匹配结果,避免链式调用失败

拆分步骤,先获取匹配项并判断是否存在,再进行属性访问:

dataWeb.forEach(element => {
    let newObj = {
      id: '',
      malzeme: {}, // 改为对象类型,匹配目标结构
      stok_kodu: '',
      aciklama: '',
      fiyat: '',
    };
    newObj.stok_kodu = element.stok_kodu;
    newObj.id = element.id;
    
    // 先获取匹配的物料项
    const matchedMalzeme = dataLogo.find(item => item.malzeme_id === element.id);
    
    if (matchedMalzeme) {
      // 赋值完整的malzeme对象,或按需提取属性
      newObj.malzeme = {
        aciklama: matchedMalzeme.aciklama,
        // 可根据需求补充其他属性如fiyat、stok_kodu等
      };
    } else {
      // 找不到匹配项时设置默认值,避免后续报错
      newObj.malzeme = { aciklama: '无匹配物料信息' };
    }
    
    newArray.push(newObj);
  });

2. 对齐目标对象结构

确保newObj.malzeme是对象类型,而非字符串。这样后续访问newObj.malzeme.aciklama时,就能正确读取到属性值。

额外提示

  • 避免嵌套过深的链式调用,拆分步骤能让代码更易读,也便于排查错误。
  • 注意异步数据加载顺序:你的报错包含async controlDisplay,要确保dataLogo和dataWeb都已完成加载后再执行循环逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:10:21