Imaginons que j'ai un tableau JS comme celui-ci :
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
Ce que je veux, c'est diviser ce tableau en N tableaux plus petits. Par exemple :
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]]
Pour Python, j'ai ceci :
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
Pour JS, la meilleure solution que j'ai pu trouver est une fonction récursive, mais je ne l'aime pas parce qu'elle est compliquée et laide. Cette fonction interne renvoie un tableau comme celui-ci [1, 2, 3, null, 4, 5, 6, null, 7, 8], et ensuite je dois le reboucler et le diviser manuellement. (Ma première tentative renvoyait ceci : [1, 2, 3, [4, 5, 6, [7, 8, 9]], et j'ai décidé de le faire avec le séparateur 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));
}
En voici un exemple en jsfiddle : http://jsfiddle.net/uduhH/
Comment feriez-vous ? Merci d'avance !