「以梦为马,逐鹿江湖」
chunk
/**
* 将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。
* 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
* @returns {Array} 返回一个新的数组(二维数组).
* @example
*
* chunk(['a', 'b', 'c', 'd'], 3);
* // => [['a', 'b', 'c'], ['d']]
*/
function chunk(array, size){
var length = array == null ? 0 : array.length;
if (!length || size < 1) {
return [];
}
var index = 0,
resIndex = 0,
// 创建一个长度为Math.ceil(length / size)的空数组,Math.ceil向上取整
result = Array(Math.ceil(length / size));
while (index < length) {
result[resIndex++] = baseSlice(array, index, (index += size));
}
return result;
}
// 模拟原生js切割数组 => slice(start, end)
function baseSlice(array, start, end) {
var index = -1,
length = array.length;
end = end > length ? length : end;
length = start > end ? 0 : (end - start);
var result = Array(length);
while (++index < length) {
result[index] = array[index + start];
}
return result;
}