在没有eval()的情况下将字符串转换为javascript中的数组

时间:2018-04-11 01:23:08

标签: javascript web cookies

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

3 个答案:

答案 0 :(得分:4)

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



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




请注意,您需要使用正确的JSON格式 - 键和非数字值需要 double 引号。使用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]);




答案 1 :(得分: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)




答案 2 :(得分:1)

您需要将引号转换为双引号,然后使用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 );