想象我有一個JS陣列是這樣的:分裂一個JS陣列分成N個陣列
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
我想是該數組分成N個較小的陣列。例如:
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]]
對於Python,我有這樣的:
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
對於JS,我能拿出最好的正確的解決方案是一個遞歸函數,但我不喜歡它,因爲它很複雜和難看。這個內部函數返回一個像這樣的數組[1,2,3],null,4,5,6,null,7,8],然後我必須再次循環並手動分割它。 (我的第一次嘗試是返回這個:[1,2,3,[4,5,6,[7,8,9]],並且我決定用空分隔符來做)。
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));
}
這裏有一個的jsfiddle:http://jsfiddle.net/uduhH/
你會怎麼做呢?謝謝!
有關 - http://stackoverflow.com/q/40166199/104380 – vsync