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

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]]

关键改动说明

  1. 兜底处理正确答案对象:用correctAnswers[ansKey] || {}确保即使没有对应题目正确答案,也不会出现undefined,避免后续访问属性报错。
  2. 键排序保证顺序:因为对象的键默认是字符串,遍历顺序可能不稳定,所以用sort((a,b) => Number(a)-Number(b))把键转成数字排序,确保生成的数组顺序和你预期一致。
  3. 明确判断值是否存在:用currentCorrect[key] !== undefined来判断,避免因为正确答案里有false值时,被|| false错误覆盖(虽然你这里正确答案都是true,但这个写法更健壮)。

内容的提问来源于stack exchange,提问作者Mat.Now

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:56:41