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

使用filter提取匹配年份的prvntList时报substring未定义错误如何解决

报错原因

  • 你遍历的prvntList数组中存在部分项缺失prctcList属性,或是prctcList下缺失inspcMon属性,读取不存在的属性会得到undefined,尝试对undefined调用substring方法就会抛出该错误。
  • 额外隐藏问题:你定义的data是数字类型的2021,substring截取得到的是字符串类型的"2021",用===严格相等判断就算年份数值匹配也会返回false。

解决方案

可以用可选链+空值合并运算符做属性读取的兜底兼容,同时统一对比值的类型:

var data = 2021;
console.log(fcltsData);
const result = fcltsData.prvntList.filter(p => {
  // 逐级读取属性,中间属性不存在时直接兜底为空字符串
  const yearStr = p.prctcList?.inspcMon?.substring(0,4) ?? ''
  // 转为相同数字类型后再对比
  return Number(yearStr) === data
})

如果你的运行环境不支持ES2020的可选链语法,可以改用传统的属性存在性判断写法:

var data = 2021;
console.log(fcltsData);
const result = fcltsData.prvntList.filter(p => {
  // 先判断依赖的属性都存在再执行截取逻辑
  if (!p.prctcList || typeof p.prctcList.inspcMon !== 'string') {
    return false
  }
  const yearStr = p.prctcList.inspcMon.substring(0,4)
  return Number(yearStr) === data
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:36:03