2016-02-25 92 views
1

我是新來的Javascript和我有一些問題轉換爲座標值數組的字符串。Javascript - 字符串座標數組

這是我的字符串(臨時 - 字符串可能有更多/更少座標):

var str = "12:13.94:13:14.9:"; 

每個座標由分離 「:」,其中

str[0] = x1; 
str[1] = y1; 
str[2] = x2; 
str[3] = y2; 
................. 

我希望它返回一個二維座標數組爲:

var cArray = [[12,13.94],[13,14.9].........]; 

有沒有什麼辦法可以做到這一點?

我想:

var cString = coorStr.split(":"); 

,但它只是返回的字符串數組,

這是我到目前爲止有:https://jsfiddle.net/mLskwxyj/

+0

'var cArray = [cString.slice(0,2),cString.slice(2,4)]'?沒有單一的功能去做你想做的事。 – Bergi

+0

'JSON.parse(「[」+「12:13.94:13:14.9:」。replace(/([\ d \。] +):([\ d \。] +)/ g,「[$ 1, $(0,-1)+「]」)' – dandavis

+0

http://stackoverflow.com/questions/4492385/how-to-convert-simple- array-into-two-dimensional-arraymatrix-in-javascript-or – epascarello

回答

1

這是一個有點笨重,但安排他們爲你想要:

var str = "12:13,94:13:14,9:"; 

var split = str.replace(/,/g, '.').split(':').map(Number); 

var result = [ 
    [ split[0], split[1] ], 
    [ split[2], split[3] ], 
]; 

console.log(result); 
// [ [ 12, 13.94 ], [ 13, 14.9 ] ] 

帳戶的歐洲風格使用,號碼。

更新:增加.map(Number)建議。

+1

你可能想添加一個'.map(Number)' – Bergi

+0

是的,這是一種更加黑客的方式,但現在已經修復。偉大的呼喚。謝謝! – tadman

+0

@tadman - 這將工作在一個for循環的事件中,字符串有更多的座標 – Jimmy

2

tadman's answer提供了一種方式來解析你的字符串到數字的數組:

var str = '12:13,94:13:14,9'; 
var num = str.split(':').map(Number); 

對於一個通用的方法來這個數組分成[x, y]雙,this answer提供了一個簡潔的解決方案。我略低於修改了它(除去Lodash依賴):

var coords = num.reduce(function (r, v, i, a) { 
    // on every even element, grab a pair of numbers and 
    // add to the result 
    if (i % 2 === 0) 
    r.push(a.slice(i, i + 2)); 

    return r; 
}, []); 

Here是一個工作的例子。請注意,具有預分配結果數組的for循環將更具性能。我只是想提供一種方法來在一個聲明中做到這一點。