2016-02-25 134 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循环将更具性能。我只是想提供一种方法来在一个声明中做到这一点。