在 javascript 中将字符串转换为数组而不使用 eval()



我想为我的网站中访问过的独特文章实现一个计数器,基本上将用户访问过的文章的ID存储在cookie中。我的问题是恢复的值当然是一个字符串。如何将看起来像这样"['test','b','c']"的字符串转换为数组?不建议使用 eval,对吧?

使用 JSON.parse 将字符串转换为数组:

const string = '["test","b","c"]';
const arr = JSON.parse(string);
console.log(arr[0]);

请注意,您需要具有正确的 JSON 格式 - 键和非数字值需要有引号。最容易用 JSON.stringify 自动序列化:

const arr = ["test","b","c"];
const str = JSON.stringify(arr);
console.log(str);

如果您绝对无法更改最初使用的字符串中的单引号,请使用 replace 将其转换为可解析的内容:

const str = "['test','b','c']";
const jsonFormattedStr = str.replace(/'/g, '"');
const arr = JSON.parse(jsonFormattedStr);
console.log(arr[1]);

虽然使用 JSON.parse() 是将数据字符串转换为可用对象的正确方法,但问题中的字符串不是有效的 JSON 语法。即单引号将导致unexpected token错误。

如果您唯一的问题是引号,那么准备数据以进行解析变得微不足道:

var str = "['test','b','c']"
// convert to double quotes
str = str.split(''').join('"')
// now parse
var arr = JSON.parse(str)
console.log(arr)

您需要将引号转换为双引号,然后使用 JSON.parse

let string = "['test','b','c']";
// replace quotes with double quotes
let stringFixed = string.replace(/'/g, '"');
// parse the string
let result = JSON.parse( stringFixed );

最新更新