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

Bootcamp计时测验开发:遍历嵌套数组生成HTML li元素遇阻

关于测验题目数据结构的合理性

你的这种存储方式完全没问题,属于常规的结构化数据设计:

  • 用数组存储所有题目,便于遍历和按顺序加载
  • 每个题目对象包含题干、选项集合、正确答案,字段清晰逻辑明确
    后续若有扩展需求(比如增加题目ID、难度标签),直接给对象追加字段即可,完全不会影响现有逻辑,不属于不良实践。
解决动态生成答案选项显示[object Object]的问题

出现[object Object]是因为你直接将对象(或未正确提取的答案内容)当作字符串插入DOM,需要先提取答案的文本内容再创建元素。以下是两种常见场景的解决方法:

场景1:answers数组为字符串集合

如果你的题目数据结构是这样的:

const questions = [
  {
    question: "2+2等于多少?",
    answers: ["3", "4", "5", "6"],
    correctAnsw: "4"
  }
];

生成选项的代码可以这么写:

// 假设获取到当前要展示的题目对象currentQuestion
const answersList = document.getElementById('answers-list'); // 页面上的ul容器
currentQuestion.answers.forEach(answerText => {
  const li = document.createElement('li');
  li.textContent = answerText; // 直接赋值字符串文本
  answersList.appendChild(li);
});

场景2:answers数组为对象集合

如果每个选项是带额外属性的对象,比如:

const questions = [
  {
    question: "2+2等于多少?",
    answers: [
      { id: 1, text: "3" },
      { id: 2, text: "4" },
      { id: 3, text: "5" },
      { id: 4, text: "6" }
    ],
    correctAnsw: 2 // 对应正确选项的id
  }
];

需要提取对象中的文本字段:

const answersList = document.getElementById('answers-list');
currentQuestion.answers.forEach(answerObj => {
  const li = document.createElement('li');
  li.textContent = answerObj.text; // 提取对象的text属性
  // 可额外给li加自定义属性存储选项ID,方便后续判断答案
  li.dataset.answerId = answerObj.id;
  answersList.appendChild(li);
});

排查小技巧

如果仍不确定问题所在,可在循环中打印要插入的内容,确认其类型:

console.log(answerItem); // 查看是字符串还是对象

根据输出结果对应提取内容即可。

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:30:49