2011-12-21 37 views
5

Tôi có một chuỗi các tháng và năm:Javascript: chia chuỗi thành mảng 2ngày

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

Tôi muốn làm điều này vào một mảng 2ngày với năm ở vị trí đầu tiên của mỗi mảng và tháng trong vị trí thứ hai. Nói cách khác, tôi muốn kết thúc với điều này:

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

Con đường tôi làm điều này hiện đang:

//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("_"); 

Có cách nào để ngưng tụ mã mà vì vậy mà tôi không bao giờ cần phải sử dụng monthArray var?

Trả lời

9

Bạn có thể sử dụng replace để lấy mã nhỏ gọn hơn:

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)]); 
}) 

hoặc map nếu trình duyệt mục tiêu của bạn hỗ trợ nó:

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

JavaScript là một ngôn ngữ động và loại biến của nó cho phép bạn giữ bất cứ điều gì ở bất cứ nơi nào bạn muốn. Bạn đã chia quyền, bây giờ chỉ cần chia chuỗi đó với _ và đặt nó trở lại trong đó.

Xem ví dụ này:

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); 

Tôi không biết những gì bạn có nghĩa là bằng cách không sử dụng monthArray. Đoạn mã trên là ít nhất bạn có thể làm, có lẽ!

4

Nếu ngưng tụ được những gì bạn đang sau:

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

Tách từng phần tách là điều hợp lý để làm- bạn có thể sử dụng một biểu thức chính quy để phù hợp với số gạch tách ra, và chèn mỗi cặp trong mảng riêng của mình đẩy vào tháng array-

nhưng tôi không thấy một sự cải tiến so với mã của bạn:

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]] 
*/ 
Các vấn đề liên quan