gpt4 book ai didi

javascript - 将数组拆分为不同大小的 block (4、3、3、3、4、3、3、3 等)

转载 作者:行者123 更新时间:2023-12-04 00:08:36 24 4
gpt4 key购买 nike

我有一个这样的数组:[1, 2, 3, 4, 5, 6, 7, 9, 10] .我需要将它分成不同大小的 block ,但使用一个简单的模式: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)];
}
}, []);

它几乎可以正常工作,期望第一个三 block (1/3)具有该 block 的最后一个元素为 4。因此,每三个的第一个 block 都重复一个键。像这样:
[
[
1,
2,
3,
4
],
[
4, // this one is repeated, and it shouldn't be
5,
6
]
]

最佳答案

您可以采用两个索引,一个用于数据数组,一个用于大小。然后以给定长度对数组进行切片并将 block 推送到 block 数组。

继续直到数据结束。

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

关于javascript - 将数组拆分为不同大小的 block (4、3、3、3、4、3、3、3 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60231799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com