JavaScript如何在主数组内使用子数组并修复Cannot read property报错
问题原因
出现Cannot read property 'property' of undefined报错有两个核心问题:
- 你在给
Object[id]赋值的对象字面量中,直接调用了还未完成初始化的Object[id].property,此时Object[id]还没被创建完成,取值自然为undefined - 代码执行顺序错误:你先给name赋值、再往property数组里push数据,就算不报错,此时property也是空数组,也拿不到你想要的第一个元素值
修正方案
调整代码执行顺序,先完成property数组的数据写入,再给name赋值即可,同时注意不要用JS内置构造函数名Object作为自定义存储对象的变量名,会覆盖全局内置方法引发其他异常:
// 替换原被占用的Object变量名,改为自定义存储对象 const dataMap = {}; function generateObject(id, Samplelist) { // 第一步初始化对象,先不赋值name dataMap[id] = { property: [] }; // 第二步遍历把数据push到property数组 Samplelist.forEach((list, i) => { dataMap[id].property.push({ type: types[order[i]], quality: qual[fileToMap], }); }); // 第三步property已经有数据后,再给name赋值 dataMap[id].name = dataMap[id].property[0]; // 可选兼容逻辑:如果Samplelist可能为空,加兜底默认值 // dataMap[id].name = dataMap[id].property[0] ?? '默认名称'; }
内容的提问来源于stack exchange,提问作者Felix Atlas
相关产品推荐
相关产品推荐

