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

splice Array のメソッドを参照してください。

チャンクする前に配列の浅いコピーを作成する以外に、配列を変更しない代替方法は、スライスと 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.fromnew Array(n)の仕組みを参照してください。

于 2012-07-03T20:36:21.863 に答える