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

遍历含name与hobbies的JSON数组时出现TypeError的原因排查

错误原因排查

1. 赋值运算符误用为比较运算符

代码里的if(i=0)是赋值操作而非判断i是否等于0。赋值语句i=0的返回值是0,在if判断中会被视为false,因此无论i原本取值如何,都会进入else分支。当i=0时,else分支里prev = i-1 = -1,data[-1]是undefined,访问data[prev].name自然会抛出"cannot read property 'name' of undefined"的错误。

2. 访问不存在的属性

你的数据对象仅包含name和hobbies属性,但代码里多处使用data[i].reports[j],这会导致访问不存在的属性,最终得到undefined。

3. 逻辑偏离需求

你的需求是同一对象内第一个hobbies项显示name,后续项name为空,但代码逻辑是和前一个对象的name做比较,完全不符合需求。


修正后的代码

按照需求,只需遍历每个对象的hobbies时,判断当前是否为该对象的第一个hobbies项即可:

const data = [
 { name:'Paul', hobbies: ['Football','Reading'] },
 { name:'Riya', hobbies: ['Singing','Dancing'] },
 { name:'Jack', hobbies: ['Gaming'] }
]

const example = (data) => {
  for(let i = 0; i < data.length; i++){
    const currentItem = data[i];
    for(let j = 0; j < currentItem.hobbies.length; j++){
      // 仅第一个hobbies项输出name,其余输出空字符串
      const displayName = j === 0 ? currentItem.name : '';
      console.log(displayName, currentItem.hobbies[j]);
    }
  }
}
example(data);

运行输出:

Paul Football
 Reading
Riya Singing
 Dancing
Jack Gaming

内容的提问来源于stack exchange,提问作者Digvijay Singh Thakur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:25:53