Lodash之chunk拆分数组成多个指定长度的区块

498 阅读1分钟

以梦为马,逐鹿江湖

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