将字符串数组"[1,2,3]"转换为Javascript中的数字数组

kak*_*aka 2 javascript arrays

我一直在寻找一个解决方案,但我只找到了皈依从["1","2","3"][1,2,3],但我的问题是如何将此转换:"[1,2,3]"[1,2,3].

你们中的许多人可能都很清楚,但对我们来说并非如此.

Ism*_*uel 7

有几种方法:

  • 使用已经提到的: eval("[1,2,3]")
  • 使用已经提到的:JSON.parse("[1,2,3]")
    你可以访问https://github.com/koldev/JsonParser并获得没有这种方法的浏览器的官方实现,比如IE7.
  • 使用jQuery的JSON解释器: $.parseJSON("[1,2,3]")
  • 使用函数构造函数: Function("return [1,2,3];")()
  • 使用任何构造函数:( []["filter"]["constructor"]("return [1,2,3]")()感谢JSF*ck)

最安全的选择是使用JSON包,来自jQuery或浏览器的本机包.

记住那eval是邪恶的!它允许执行任意代码.
这同样适用于在Function构造函数,但与那些你可以添加'return'到它.
如果这样做eval("[1,2,3]; evil();"),该evil()函数将执行,同时Function("return [1,2,3]; evil();")将阻止执行evil().
这不是一个完美的解决方案,因为人们仍然可以做Function("return evil() || [1,2,3];"),evil()并将被执行.但是,在这种情况下,[1,2,3]只有当返回evil()回报falsy值("",null,0,false,...).


vam*_*nem 5

使用JSON.parse("[1,2,3]");

工作示例http://jsfiddle.net/bcguevd2/


小智 5

你也可以自己解析:

var s = '[1,2,3]';
var a = s.slice(1, -1).split(',').map(Number);
// .slice(1, -1) -> "1,2,3"
// .split(',')   -> ["1", "2", "3"]
// .map(Number)  -> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

变化:

var a = (s.match(/-?\d+/g) || []).map(Number);
// .match(/-?\d+/g)     -> ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)
// '[]'.match(/-?\d+/g) -> null
// (null || [])         -> []
Run Code Online (Sandbox Code Playgroud)


Rob*_*ker 0

您可以使用eval 以下警告 不要eval不必要地使用!

var myArray = eval("[1,2,3]");
Run Code Online (Sandbox Code Playgroud)