JavaScript中已赋值属性的对象报undefined错误原因排查
报错原因
- 你定义的
obj为普通对象,代码中全程以表头字段为键给obj赋值属性,从未给0这个键赋值,因此obj[0]本身就是undefined,后续访问obj[0].name自然会触发undefined相关报错。
修复方案
- 把forEach循环内打印语句里的
obj[0]改为你需要打印的内容:如果要查看整个obj直接打印obj,如果要查看当前正在赋值的属性,改为obj[headers[i]] - 把循环外的打印语句
console.log('obj: ' + obj[0].name);改为console.log('obj: ' + obj.name);即可正确读取obj的name属性
修正后的完整代码
function arrayToAlaObjectOfArrays(data) { // 过滤掉data中返回的所有空记录(元素) data = data.filter(record => !record.every(col => col=='')); let headers = data.shift(); // 取出第一条记录作为列表头 console.log('data: ' + data); console.log('headers: ' + headers); let arrNew = data.map(record => { let obj = {}; record.forEach((cell,i) => { obj[headers[i]] = cell; // 这里修改为打印当前赋值的属性,按需调整即可 console.log('header[i]' + headers[i] + ' cell: ' + cell + ' 当前属性值: ' + obj[headers[i]]); }); // 这里去掉[0]直接访问obj的name属性 console.log('obj: ' + obj.name); return obj; }); console.log('arrNew: ' + arrNew); return arrNew; }
内容的提问来源于stack exchange,提问作者Mor Sagmon
相关产品推荐
相关产品推荐

