JavaScript数组分块最常用方式是Array.from配合slice:const chunk=(arr,size)=>Array.from({length:Math.ceil(arr.length/size)},(_,i)=>arr.slice(i*size,i*size+size))。

JavaScript 中将数组按指定大小分块,最常用且简洁的方式是使用 slice() 配合循环或高阶函数(如 Array.from() 或 reduce())实现。
用 Array.from + slice 实现分块
这是推荐的现代写法,语义清晰、代码简短、无需额外库:
- 利用 Array.from 根据目标块数创建新数组
- 每个元素调用 slice 截取对应区间
- 自动处理末尾不足块长的情况(
slice越界不报错,返回剩余元素)
示例:
const chunk = (arr, size) =>Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>
arr.slice(i * size, i * size + size)
);
chunk([1, 2, 3, 4, 5, 6, 7], 3); // [[1,2,3], [4,5,6], [7]]
用 for 循环手动分块(兼容性最好)
适合需要最大兼容性(如旧版 IE)或对性能有极致要求的场景:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用 for 遍历,步长为
size - 每次用
slice(i, i + size)提取子数组 - 逻辑直观,易于调试和修改
示例:
const chunk = (arr, size) => {const result = [];
for (let i = 0; i result.push(arr.slice(i, i + size));
}
return result;
};
用 reduce 实现(函数式风格)
适合已有函数式编程习惯、或需链式调用的场景:
- 通过 reduce 累积分块结果
- 根据当前索引计算所属块序号:
Math.floor(index / size) - 注意:需初始化空数组,并确保每块存在才 push
示例:
const chunk = (arr, size) =>arr.reduce((chunks, item, i) => {
const chunkIndex = Math.floor(i / size);
if (!chunks[chunkIndex]) chunks[chunkIndex] = [];
chunks[chunkIndex].push(item);
return chunks;
}, []);
注意事项与常见坑
实际使用时需留意以下几点:
- size ≤ 0 时应提前返回空数组或抛错,避免无限循环或意外结果
-
输入非数组类型(如 null、string)需做类型校验,否则
slice可能静默失败或行为异常 - 原数组不会被修改(所有方法都返回新数组),符合不可变原则
- 若需“填充”最后一块到指定长度(如补 0),需额外逻辑,不属于基础分块范畴

















