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
相关产品推荐
相关产品推荐

