使用split()处理数组时无法去除单引号的问题求助
解决从远程JS文件提取JOURNAL数组的问题
问题分析
你的代码目前存在几个核心问题:
- 硬编码
slice(16,6786)截取内容,一旦目标文件更新,截取范围就会失效 - 处理后得到的是字符串形式的对象,控制台打印数组时用单引号包裹字符串元素,本质并非真正的JS对象数组
- 手动处理空格、换行的方式容易引入格式问题,比如每个元素末尾残留的逗号
正确解决方案
直接提取目标文件中的JOURNAL数组内容,通过正则匹配+JSON解析的方式转换成可用的JS对象数组,代码如下:
const fetchJournal = async () => { try { const response = await fetch("https://eloquentjavascript.net/code/journal.js"); const text = await response.text(); // 匹配并提取JOURNAL数组的完整内容 const journalMatch = text.match(/const JOURNAL = ([\s\S]+?);/); if (!journalMatch) throw new Error("未找到目标JOURNAL数组"); let journalStr = journalMatch[1]; // 移除JSON不允许的末尾逗号(原数组每个对象后都有逗号) journalStr = journalStr.replace(/,\s*([\]}])/g, '$1'); // 解析为真正的JS对象数组 const JOURNAL = JSON.parse(journalStr); return JOURNAL; } catch (error) { console.error(error); } }; // 调用使用 const JOURNAL = await fetchJournal(); console.log(JOURNAL); console.log(JOURNAL[0].events); // 可直接访问对象属性
方案说明
- 正则提取数组:通过
/const JOURNAL = ([\s\S]+?);/匹配数组的完整内容,避免硬编码截取位置的脆弱性 - 处理末尾逗号:原JS文件中的数组允许末尾逗号,但JSON不支持,所以用正则替换掉对象/数组闭合前的逗号
- JSON解析:将处理后的数组字符串直接解析为JS对象数组,此时每个元素都是可直接操作的对象,而非字符串
内容的提问来源于stack exchange,提问作者Sergey Gorin
相关产品推荐
相关产品推荐

