FooBarの:
私はそうのような配列を持っています:[1, 2, 3, 4, 5, 6, 7, 9, 10]
。4、3、3、3、4、3、3、3のようなので、私はまだの単純なパターンで、異なるサイズのチャンクにチャンクにそれを必要とします:
[
[ // four
1,
2,
3,
4
],
[ // three (1/3)
5,
6,
7
],
[ // three (2/3)
8,
9,
10
],
[ // three (3/3)
11,
12,
13
],
[ // four
14,
15,
16,
17
],
[ // three (1/3)
18,
19,
20
], // and so on..
]
私は、私がカスタマイズされているこのコードを試してみました:
const arr; // my array of values
const chuncked = arr.reduce((acc, product, i) => {
if (i % 3) {
return acc;
} else if (!didFourWayReduce) {
didFourWayReduce = true;
fourWayReduces++;
if ((fourWayReduces - 1) % 2) { // only make every second a "4 row"
return [...acc, arr.slice(i, i + 3)];
} else {
return [...acc, arr.slice(i, i + 4)];
}
} else {
didFourWayReduce = false;
return [...acc, arr.slice(i, i + 3)];
}
}, []);
そして、それは動作しますが、ほとんど、1つのキーが3のすべての最初のチャンクを繰り返しているのでスリーの最初のチャンク(1/3)4とチャンクの最後の要素を持っていることを期待しています。そのようです:
[
[
1,
2,
3,
4
],
[
4, // this one is repeated, and it shouldn't be
5,
6
]
]
ニーナショルツ:
あなたは、2つのインデックス、データ配列用とサイズのための1つを取ることができます。その後、所定の長さの配列をスライスし、チャンク列にチャンクを押します。
データの最後まで進みます。
var data = Array.from({ length: 26 }, (_, i) => i + 1),
sizes = [4, 3, 3, 3],
i = 0,
j = 0,
chunks = [];
while (i < data.length) chunks.push(data.slice(i, i += sizes[j++ % sizes.length]));
console.log(chunks);
.as-console-wrapper { max-height: 100% !important; top: 0; }