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

7

我一直在寻找解决方案,但我只发现了从["1","2","3"]转换为[1,2,3],但我的问题是如何将这个字符串:"[1,2,3]" 转换成 [1,2,3]

对于许多人来说可能很清楚,但对我来说不是。

6个回答

11
有几种方法:
  • 使用先前提到的方法: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是有风险的。它允许执行任意代码。
对于函数构造函数也一样,但是对于这些,您可以在其中添加'return'
如果您执行eval(“[1,2,3]; evil();”),则将执行evil()函数,而Function(“return [1,2,3]; evil();”)将防止执行evil()
这不是完美的解决方案,因为仍然可以执行Function(“return evil() || [1,2,3];”),并且将执行evil()。但是,在这种情况下,只有在evil()返回虚值(“”null0false,...)时才会返回[1,2,3]


评论不适合进行长时间的讨论;此对话已被移至聊天室 - Taryn

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]

变体:

var a = (s.match(/-?\d+/g) || []).map(Number);
// .match(/-?\d+/g)     -> ["1", "2", "3"]

// '[]'.match(/-?\d+/g) -> null
// (null || [])         -> []

那是一个有趣的变化,但我建议你使用/\b(-?\d+(?:\.\d+)?)\b/g - Ismael Miguel
1
жҲ–иҖ… /\b(-?\d+(?:\.\d*)?)\b/gпјҢеӣ дёәJavascriptе…Ғи®ёж•°еӯ—еҶҷжҲҗ1.гҖӮ - Ismael Miguel

5

3

其中一种解决方案是使用JSON.parse()

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

此外,如果源代码可信,您可以使用eval()函数(不要滥用eval!)来执行代码。
eval("[1,2,3]")

3
这是最完整的答案。只需提醒一下,JSON.parse在IE7及以下版本中不受支持(为了那些仍然必须支持它的人们祈祷),但有一些替代方案可供使用(尤其是json2.js)。 - MaxArt
1
你为什么会建议使用 eval - Cerbrus

0
    Well, "[1,2,3]" is a String object.
    You need to deserialize it using JSON.parse().

    e.g: 
    var arr = "[1,2,3]"
    JSON.parse(arr)

    output will be >> [1,2,3]

Note: browser console don't detect JSON.parse() or JSON.stringify()
You have to do it in your code editor.

0

使用 eval 通常是一种不好的做法。始终警告它。 - MaxArt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接