2012-05-04 41 views
7

thể trùng lặp:
Split array into chunkshoạt Javascript để trả về một mảng mới của giá trị kết hợp từ một mảng các giá trị đơn

Tôi cố gắng để chuyển đổi một mảng các giá trị vào một mảng mới giá trị được ghép nối.

Ví dụ tôi cần phải chuyển đổi:

var arr = [1,2,3,4,5,6,7,8]; 

thành:

arr = [[1,2], [3,4], [5,6], [7,8]]; 

tôi đã cố gắng sử dụng phương pháp .map jQuery() như vậy nhưng điều này không làm việc cho tôi:

arr= $.map(arr, function(n, i){ 
return [n + ',' + n[ i + 1 ]]; 
}); 
+3

'map' khi đưa ra một mảng như là một trở lại flattens nó vào mảng mới, bạn có thể chỉ muốn làm điều đó cho mình. – Andrew

+0

Ngoài ra '[...]. Map' là một hàm dựng sẵn trong javascript (ấn bản ECMAScript thứ 5, được hỗ trợ bởi tất cả các trình duyệt hiện đại, trừ khi bạn đếm những người vẫn chưa nhấp vào nút" nâng cấp lên IE9 "mà Microsoft shoves infront của bạn). – ninjagecko

Trả lời

9

Nếu bạn nhấn mạnh vào việc sử dụng bản đồ, bạn có thể làm như sau:

arr= $.map(arr, function(n, i){ 
    if (i%2 === 0) return [[n, arr[ i + 1 ]]]; 
}); 
+0

+1 điều này thật tuyệt. P.s: sử dụng luôn luôn '===' để so sánh với '0'. Và việc sử dụng '{}' (mặc dù không cần thiết) là một cách hay để viết mã sạch. –

+1

Sử dụng mô-đun là một cách sạch sẽ tốt đẹp để làm điều này, nhưng tôi thừa nhận rằng các vòng lặp dường như thích hợp hơn cho loại điều này, mặc dù bản đồ đã đề cập OP(). Vẫn +1. – adeneo

+0

@ RokoC.Buljan cảm ơn, đã cập nhật toán tử. – McGarnagle

6

Nếu bạn không muốn sử dụng một cái búa trên đinh bấm:

var arr = [1,2,3,4,5,6,7,8]; 

var newarr = new Array(); 

for (var i=0; i<arr.length; i=i+2) { 
    newarr.push(arr.slice(i,i+2)); 
} 
3

Bạn không muốn map, bạn muốn reduce.

Đây là cái gì đó nên làm việc:

var endArr = [], 
    arr = [ 1, 2, 3, 4, 5, 6, 7, 8 ], 
    i = 0; 

arr.reduce(function(prev, curr, index) { 
    if (index % 2 === 0) { 
     endArr[ i ] = [ prev, curr ]; 
    } 
    i++; 
}); 

Và cũng giống cái gì khác tôi nghĩ về:

var endArr = [], 
    arr = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; 

while (arr.length) { 
    endArr.push(arr.splice(0, 2)); 
} 

Edit: Arf, đó là giải pháp tương tự như Chris Gutierrez.

3

không sử dụng jquery cho mọi vấn đề:

var arr = [1, 2, 3, 4, 5, 6, 7, 8]; 
var narr = []; 
for (i = 0; i < arr.length; i = i + 2) { 
    narr[i/2] = [arr[i], arr[i + 1]]; 
} 

nhưng này chỉ hoạt động nếu bạn có một thậm chí đếm của arr

2

Một ví dụ khác ...

var arr = [1 , 2, 3, 4, 5, 6, 7, 8] 
var final = [] 
while(arr.length) { 
    final.push(arr.splice(0, 2)) 
} 
+0

Chỉ nhận ra điều này tương tự như giải pháp của Jonathan M –

+1

Không, bạn đang sử dụng 'splice()' và tôi đang sử dụng 'slice()'. Công việc tốt. –

Các vấn đề liên quan