Hãy tưởng tượng tôi có một mảng JS như thế này:
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
Điều tôi muốn là chia mảng đó thành N mảng nhỏ hơn. Ví dụ:
split_list_in_n(a, 2)
[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11]]
For N = 3:
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11]]
For N = 4:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11]]
For N = 5:
[[1, 2, 3], [4, 5], [6, 7], [8, 9], [10, 11]]
Đối với Python, tôi có cái này:
def split_list_in_n(l, cols):
""" Split up a list in n lists evenly size chuncks """
start = 0
for i in xrange(cols):
stop = start + len(l[i::cols])
yield l[start:stop]
start = stop
Đối với JS, giải pháp tốt nhất mà tôi có thể đưa ra là một hàm đệ quy, nhưng tôi không thích nó vì nó phức tạp và xấu xí. Hàm bên trong này trả về một mảng như thế này [1, 2, 3, null, 4, 5, 6, null, 7, 8], sau đó tôi phải lặp lại nó và chia nó theo cách thủ công. (Nỗ lực đầu tiên của tôi là trả về điều này: [1, 2, 3, [4, 5, 6, [7, 8, 9]]] và tôi quyết định làm điều đó với dấu phân tách null).
function split(array, cols) {
if (cols==1) return array;
var size = Math.ceil(array.length / cols);
return array.slice(0, size).concat([null]).concat(split(array.slice(size), cols-1));
}
Đây là một jsfiddle của điều đó: http://jsfiddle.net/uduhH/
Bạn làm điều đó như thế nào? Cảm ơn!