在JavaScript中,数组的分组操作可以通过多种方式实现,具体取决于你想要的分组方式。以下是两种常见的分组方式:平均分配和索引间隔分组。
平均分配的目标是将数组元素均匀地分配到指定数量的组中。例如,将数组 [1, 2, 3, 4, 5, 6, 7, 8]
分成3组,结果可能是 [[1, 2, 3], [4, 5, 6], [7, 8]]
。
function chunkArray(arr, numGroups) {
const chunkSize = Math.ceil(arr.length / numGroups);
const result = [];
for (let i = 0; i < arr.length; i += chunkSize) {
result.push(arr.slice(i, i + chunkSize));
}
return result;
}
const arr = [1, 2, 3, 4, 5, 6, 7, 8];
const numGroups = 3;
console.log(chunkArray(arr, numGroups));
// 输出: [[1, 2, 3], [4, 5, 6], [7, 8]]
索引间隔分组的目标是将数组元素按照一定的间隔分配到不同的组中。例如,将数组 [1, 2, 3, 4, 5, 6, 7, 8]
按照间隔2分组,结果可能是 [[1, 3, 5, 7], [2, 4, 6, 8]]
。
function intervalGroup(arr, interval) {
const result = Array.from({ length: interval }, () => []);
for (let i = 0; i < arr.length; i++) {
result[i % interval].push(arr[i]);
}
return result;
}
const arr = [1, 2, 3, 4, 5, 6, 7, 8];
const interval = 2;
console.log(intervalGroup(arr, interval));
// 输出: [[1, 3, 5, 7], [2, 4, 6, 8]]
如果你想要结合平均分配和索引间隔分组,可以先进行平均分配,然后在每个组内进行索引间隔分组。
function combinedGroup(arr, numGroups, interval) {
const chunked = chunkArray(arr, numGroups);
return chunked.map(subArr => intervalGroup(subArr, interval));
}
const arr = [1, 2, 3, 4, 5, 6, 7, 8];
const numGroups = 2;
const interval = 2;
console.log(combinedGroup(arr, numGroups, interval));
// 输出: [[[1, 3], [2, 4]], [[5, 7], [6, 8]]]
chunkArray
函数将数组均匀分配到指定数量的组中。intervalGroup
函数将数组元素按照指定的间隔分配到不同的组中。根据你的具体需求,可以选择合适的分组方式。