103

如何将一个数组(有 10 个项目)拆分为 4 个块,其中最多包含n项目。

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);

它打印:

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

但是,以上假设n = 3该值应该是动态的。

谢谢

4

2 回答 2

200

它可能是这样的:

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);

请参阅拼接阵列的方法。

一种不改变数组的替代方法,除了在分块之前创建它的浅拷贝之外,可以通过使用slice和 for...循环来完成:

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);

虽然更面向函数式编程的方法可能是:

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));

具体参见Array.from以及new Array(n)的工作原理。

于 2012-07-03T20:36:21.863 回答
73

也许这段代码有帮助:

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})

于 2013-10-30T10:17:12.950 回答