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

JavaScript数组push添加API数据时出现多余单引号问题

嘿,我来帮你拆解这个问题~

为啥会出现单引号?

你看到的单引号并不是真的存在于数组内容里,而是浏览器/控制台用来标记「这是一个字符串类型值」的显示标记。问题的核心在于你push进数组的不是JavaScript对象,而是一段你手动拼接的JSON格式字符串。

对比两种写法的区别:

  • 硬编码时你写的{ "The Eiffel Tower...": [...] }是一个标准JS对象,数组里存储的是对象类型
  • 而你通过qdata拼接出来的是一个字符串(整个内容被你用引号包裹成了字符串),数组里存储的是字符串类型,所以控制台会用单引号把这个字符串内容包起来展示给你

另外这种字符串拼接的方式还暗藏风险:如果题目或选项里出现引号、特殊字符(比如你例子里的',这是HTML转义后的单引号),很容易导致JSON格式损坏,后续根本没法正常读取数组里的题目数据。

正确的解决方式

别再拼接字符串了,直接创建JavaScript对象然后push到数组里,这样数组里存储的就是和硬编码一样的对象类型:

// 直接构建对象,用方括号语法把question作为对象的键
var questionObj = {
  [question]: [answer1, answer2, answer3, answer4]
};
questions.push(questionObj);

如果你的question变量里带有HTML实体(比如'),建议先把它解码成正常字符,避免显示出奇怪的转义内容:

// 简单的HTML实体解码函数
function decodeHtml(str) {
  const tempElement = document.createElement('textarea');
  tempElement.innerHTML = str;
  return tempElement.value;
}

// 先解码题目,再构建对象
const decodedQuestion = decodeHtml(question);
const questionObj = {
  [decodedQuestion]: [answer1, answer2, answer3, answer4]
};
questions.push(questionObj);

这样处理后,你的questions数组就会和硬编码的格式完全一致,控制台也不会再显示那些奇怪的单引号啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:28:00