JavaScript数组转换求助:索引不匹配设false时遇类型错误
解决JavaScript数组转换中的TypeError问题
嘿,我来帮你搞定这个报错!你遇到的TypeError: Cannot read property '0' of undefined,原因其实很明确:当遍历到Answers里的'0'这个键时,correctAnswers里根本没有对应的'0'属性,此时correctAnswers[corrAns]就是undefined,再去访问它的[k]属性自然就会报错啦。
错误根源拆解
你的原代码里直接写了correctAnswers[corrAns][k] || false,但没考虑correctAnswers[corrAns]本身可能不存在的情况。比如处理第一个题目(键为'0')时,correctAnswers['0']是undefined,这时候undefined[k]就会触发这个类型错误。
修复后的代码方案
下面是修正后的代码,我会一步步解释关键改动:
// 你的原始数据 const Answers = { '0': { '0': 'ans 1' }, '1': { '0': 'ans 11', '1': 'ans 22', '2': 'ans 33' } }; const correctAnswers = { '1': { '0': true, '1': true } }; const convertArray = []; // 先把Answers的键按数字排序,避免for...in遍历顺序不确定的问题 Object.keys(Answers).sort((a, b) => Number(a) - Number(b)).forEach(ansKey => { const currentAnswers = Answers[ansKey]; // 先判断当前题目是否有对应的正确答案,没有的话用空对象兜底 const currentCorrect = correctAnswers[ansKey] || {}; // 把选项的键按数字排序,保证数组顺序和原数据一致 const optionKeys = Object.keys(currentAnswers).sort((a, b) => Number(a) - Number(b)); // 遍历每个选项,生成对应的布尔值数组 const boolArr = optionKeys.map(key => { // 如果正确答案里有这个选项的记录,就取它的值,否则设为false return currentCorrect[key] !== undefined ? currentCorrect[key] : false; }); convertArray.push(boolArr); }); console.log(convertArray); // 输出:[[false], [true, true, false]]
关键改动说明
- 兜底处理正确答案对象:用
correctAnswers[ansKey] || {}确保即使没有对应题目正确答案,也不会出现undefined,避免后续访问属性报错。 - 键排序保证顺序:因为对象的键默认是字符串,遍历顺序可能不稳定,所以用
sort((a,b) => Number(a)-Number(b))把键转成数字排序,确保生成的数组顺序和你预期一致。 - 明确判断值是否存在:用
currentCorrect[key] !== undefined来判断,避免因为正确答案里有false值时,被|| false错误覆盖(虽然你这里正确答案都是true,但这个写法更健壮)。
内容的提问来源于stack exchange,提问作者Mat.Now
相关产品推荐
相关产品推荐

