2013-10-17 35 views
11

我有一個返回這樣的值的列表中的AJAX請求:將陣列數組的字符串轉換爲數組的Javascript數組的優雅方式?

"[-5, 5, 5], [-6, 15, 15], [7, 13, 12]" 

我需要它是一個JavaScript陣列號:

[[-5, 5, 5], [-6, 15, 15], [7, 13, 12]] 

我試圖替換「[」和']'爲'|'然後按'|'分割和foreach項分割','並將它們添加到一個數組,但這是而不是優雅。

你們有什麼建議嗎?

+2

定義優雅?大多數字符串操作都不是很漂亮。 –

+0

使用split + for循環可能會匹配會做可能不優雅或漂亮。 ;-) – RobG

回答

17

您可以使用JSON.parse()該字符串轉換成一個數組,只要你把它包裝在一些括號手動第一:

var value = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"; 
var json = JSON.parse("[" + value + "]"); 

console.log(json); 

我建議糾正在服務器如果可能的輸出,雖然。

+1

感謝您的快速和優雅的迴應! – cesarferreira

+0

這很漂亮,:) –

0

如果您正在生成的數據,你相信它,只需使用eval

var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]" 

var arrays = eval('[' + string + ']'); 

或者,開始返回合式JSON。

+2

在'eval is evil'之前。 – meagar

+0

@upvoter當字符串*也是*有效的JSON時,真的沒有什麼好的理由使用'eval',請替代我。 – meagar

+0

即使jQuery使用* eval *所以它一定是好的,對吧? – RobG

1

在我的iPad功能

var strToArr = function(string){ return JSON.parse('[' + string + ']')} 

console.log(strToArr("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]")); 
+0

該函數不應該被命名爲'stringToArr'嗎? – Marty

+0

@MartyWallace哦,謝謝,改變了。 – Felix

+1

爲什麼-1 ........? – Jashwant

1
var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"; 
var arr = []; 
var tmp = string.split('], '); 

for (var i=0; i<tmp.length; i++) { 
    arr.push(tmp[i].replace(/\[|\]/g, '').split(', ')); 
} 

打字,所以我提前道歉任何錯別字。

2

這種解決方案在實踐中是愚蠢的 - 完全使用JSON.parse如其他人所說的 - 但在其與正則表達式樂趣的利益,在這裏你去:

function getMatches(regexp, string) { 
    var match, matches = []; 
    while ((match = regexp.exec(string)) !== null) 
    matches.push(match[0]); 
    return matches; 
} 

function parseIntArrays(string) { 
    return getMatches(/\[[^\]]+\]/g, string) 
    .map(function (string) { 
     return getMatches(/\-?\d+/g, string) 
     .map(function (string) { 
      return parseInt(string); 
     }); 
    }); 
} 

parseIntArrays("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"); 
相關問題