簡體   English   中英

將字符串數組“[1,2,3]”轉換為Javascript中的數字數組

[英]Convert string array "[1,2,3]" to array of number in Javascript

我一直在尋找解決方案,但我只找到了從["1","2","3"][1,2,3]轉換,但我的問題是如何轉換: "[1,2,3]"[1,2,3]

你們中的許多人可能很清楚,但對我來說卻不是。

有幾種方法:

  • 使用已經提到的: 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()將被執行。 但是,在這種情況下,只有當evil()返回假值( ""null0false 、...)時,才會返回[1,2,3]

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

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

一種解決方案是使用JSON.parse()

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

如果來源是可信的,您也可以使用eval()不要不必要地使用 eval! ),例如

eval("[1,2,3]")

你也可以自己解析:

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 || [])         -> []

您可以使用eval有以下告誡不要使用eval不必要!

var myArray = eval("[1,2,3]");
    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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM