遍历含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
相关产品推荐
相关产品推荐

