Stellen Sie sich vor, ich habe ein JS-Array wie dieses:
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
Ich möchte dieses Array in N kleinere Arrays aufteilen. Zum Beispiel:
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]]
Für Python habe ich Folgendes:
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
Für JS ist die beste richtige Lösung, die ich finden könnte, eine rekursive Funktion, aber ich mag sie nicht, weil sie kompliziert und hässlich ist. Diese innere Funktion gibt ein Array wie dieses zurück [1, 2, 3, null, 4, 5, 6, null, 7, 8], und dann muss ich es erneut schleifen und manuell teilen. (Mein erster Versuch war, dies zurückzugeben: [1, 2, 3, [4, 5, 6, [7, 8, 9]]], und ich entschied mich, dies mit dem Nulltrennzeichen zu tun).
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));
}
Hier ist eine jsfiddle davon: http://jsfiddle.net/uduhH/
Wie würdest du das machen? Vielen Dank!