2011-12-21 33 views
5

我有个月甚至几年的字符串:的Javascript:字符串分割到二维数组

var months= "2010_1,2010_3,2011_4,2011_7"; 

我要制作成在每个阵列中的第一位置,月与去年二维数组这第二位。换句话说,我想这结束了:

var monthArray2d = [[2010,1],[2010,3][2011,4],[2011,7]]; 

我做的方式目前是:

//array of selected months 
var monthArray = months.split(","); 

//split each selected month into [year, month] array 
var monthArray2d = new Array(); 
for (var i = 0; i < monthArray.length; i++) { 
    monthArray2d[i] = monthArray[i].split("_"); 

有没有办法凝聚的代码,使我从来没有需要使用monthArray var?

回答

9

您可以使用replace获得更紧凑的代码:如果你的目标浏览器支持

var months= "2010_1,2010_3,2011_4,2011_7"; 
var monthArray2d = [] 

months.replace(/(\d+)_(\d+)/g, function($0, $1, $2) { 
    monthArray2d.push([parseInt($1), parseInt($2)]); 
}) 

map

monthArray2d = months.split(",").map(function(e) { 
    return e.split("_").map(Number); 
}) 
3

JavaScript是另一种动态语言,其变量类型允许您随时随地保存任何内容。你做了右分裂,现在只需将该字符串与_分开,然后放回原处。

见这个例子:

var months= "2010_1,2010_3,2011_4,2011_7"; 

var monthArray = months.split(","); 

for (var i = 0; i < monthArray.length; i++) { 
    monthArray[i] = monthArray[i].split("_"); 
} 

console.log(monthArray); 

我不知道你不是故意的使用monthArray什么。上面的代码是最不可能的,可能!

4

如果凝结就是你追求的:

var month_array = months.split(",").map(function(x){return x.split("_")}); 
1

拆分每个拆分是明智的事情 - ,你可以使用正则表达式匹配下划线分隔的数字, 并在其自己的阵列插入每一对推至一个月阵列 -

,但我没有看到在你的代码的改进:

var s= "2010_1,2010_3,2011_4,2011_7", 

A= [], rx=/(\d+)_(\d+)/g; 

while((M= rx.exec(s))!= null){ 
    A.push([M[1], M[2]]); 
} 


/* returned value: (Array) 
[[2010,1],[2010,3],[2011,4],[2011,7]] 
*/