118 votes

Diviser le tableau en morceaux de longueur N

Comment diviser un tableau (qui a 10 éléments) en 4 morceaux, qui contiennent un maximum de n articles.

var a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
//a function splits it to four arrays.
console.log(b, c, d, e);

Et ça imprime :

['a', 'b', 'c']
['d', 'e', 'f']
['j', 'h', 'i']
['j']

Ce qui précède suppose que n = 3 Toutefois, la valeur doit être dynamique.

Gracias

224voto

ZER0 Points 7358

Ça pourrait être quelque chose comme ça :

var a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];

var arrays = [], size = 3;

while (a.length > 0)
  arrays.push(a.splice(0, size));

console.log(arrays);

Véase épissure La méthode de l'Array.

Une méthode alternative qui ne modifie pas le tableau, mais qui crée une copie superficielle de celui-ci avant de l'ouvrir, pourrait être réalisée en utilisant la méthode suivante tranche et une boucle for nique :

var a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];

var arrays = [], size = 3;

for (let i = 0; i < a.length; i += size)
   arrays.push(a.slice(i, i + size));

console.log(arrays);

Alors qu'une approche plus orientée vers la programmation fonctionnelle pourrait l'être :

const chunks = (a, size) =>
    Array.from(
        new Array(Math.ceil(a.length / size)),
        (_, i) => a.slice(i * size, i * size + size)
    );

let a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];

console.log(chunks(a, 3));
console.log(chunks(a, 2));

Véase Array.from et comment nouveau tableau (n) travaux, notamment.

75voto

Miro Points 320

Ce code peut peut-être vous aider :

var chunk_size = 10;
var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];
var groups = arr.map( function(e,i){ 
     return i%chunk_size===0 ? arr.slice(i,i+chunk_size) : null; 
}).filter(function(e){ return e; });
console.log({arr, groups})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X