次のようなJS配列があると想像してください。
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/
どうしますか?ありがとう!