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

JavaScript对象属性推送至新对象时触发TypeError错误求助

解决TypeError: Cannot read property 'text' of undefined的问题

你这段代码在处理语义角色数据时触发了错误,根源是arrayItem.object为undefined,直接访问它的text属性自然会报错。下面给你几个实用的解决思路:

1. 安全访问嵌套属性(优先推荐)

方法A:用可选链操作符(ES2020+支持)

这个语法能帮你安全地访问嵌套属性,只要中间任何一层是undefined或null,就会返回undefined而不是抛出错误,代码也更简洁:

chunk[count].semantic.push({
  subject: arrayItem.subject?.text,
  object: arrayItem.object?.text,
  action: arr... // 你的原有action逻辑
});

方法B:手动条件判断(兼容旧环境)

如果你的运行环境不支持可选链,就手动加判断兜底:

// 先提取属性,不存在就设为undefined或默认值
const subjectText = arrayItem.subject ? arrayItem.subject.text : undefined;
const objectText = arrayItem.object ? arrayItem.object.text : undefined;

chunk[count].semantic.push({
  subject: subjectText,
  object: objectText,
  action: arr... // 你的原有action逻辑
});

2. 过滤无效数据再处理

如果只有包含有效object的语义角色才需要处理,可以先过滤掉不符合条件的条目:

msg.tmp.nlu.results.semantic_roles
  .filter(item => item.object && item.object.text) // 只保留有object且有text的项
  .forEach(arrayItem => {
    chunk[count].semantic.push({
      subject: arrayItem.subject.text,
      object: arrayItem.object.text,
      action: arr... // 你的原有action逻辑
    });
  });

3. 排查NLU返回数据的结构

你可以先打印console.log(msg.tmp.nlu.results.semantic_roles)看看实际返回的数据结构,确认是不是部分语义角色确实没有object字段——毕竟NLU识别结果可能存在不完整的情况,了解数据特点后能更精准地调整处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:00:42