分享

lodash函数库 -- chunk

 头号码甲 2021-08-28

loadsh函数库中的 chunk 函数采用 typescript 语法重写.

chunk 函数
将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。
如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。

/**
 *
 * 将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。
 * 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
 *
 * @param array 需要处理的数组
 * @param size 每个数组区块的长度
 * @returns {Array<Array<T>>}
 * @example
 *
 * chunk(['a', 'b', 'c'], 2)
 * // => [['a', 'b'], ['c']]
 *
 * chunk(['a', 'b', 'c','d'], 2)
 * // => [['a', 'b'], ['c','d']]
 */
const chunk = <T>(array: Array<T>, size = 1): Array<Array<T>> => {
// 边界检测
// 需要考虑块长度小于1和空数组
const length = array.length;
if (!length || size < 1) return [];

let index = 0; // 处理数组起始位
let resindex = 0; // 新数组起始位
const result = new Array<Array<T>>(Math.ceil(length / size));
while (index < length) {
result[resindex++] = array.slice(index, (index += size)); // size 为步长值
}
return result;
};

export default chunk;
import chunk from "../src/chunk";

const arr = [1, 2, 3, 4, 5, 6];
const n = chunk(arr, 3);
console.log(n); // [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]

const arrs = ["a", "b", "c"];
const n1 = chunk(arrs, 2);
console.log(n1); // [ [ 'a', 'b' ], [ 'c' ] ]

const arre = [] as Array<string>;
const n2 = chunk(arre, 2);
console.log(n2); // []

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多