import { mathCeil } from './internals/native';
import isArray from './isArray';
import toLength from './toLength';
/**
* 将数组拆分成多个 `size` 长度的区块,并将这些区块组成一个新数组。
*
* 如果数组无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
*
* @alias module:Array.chunk
* @since 1.0.0
* @param {Array} array 要处理的数组。
* @param {number} [size=1] 每个数组区块的长度。默认 `1`。
* @returns {Array} 拆分区块的新数组。
* @example
*
* const array = ['a', 'b', 'c', 'd'];
*
* chunk(array, 2); // [['a', 'b'], ['c', 'd']]
*
* chunk(array, 3); // [['a', 'b', 'c'], ['d']]
*
*/
function chunk(array, size = 1) {
size = toLength(size);
if (!isArray(array) || size < 1) {
return [];
}
const length = array.length;
const result = Array(mathCeil(length / size));
let resIndex = 0, index = 0;
while (index < length) {
result[resIndex++] = array.slice(index, (index += size));
}
return result;
}
export default chunk;