数组分组chunk的一种写法

lodash的_.chunk函数可以将数组按照数量分成若干组,

例如:

const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
const groupByNum = 3;

会分成

[ [1,2,3], [4,5,6], [7,8,9], [10,11] ]

下面是一种 map + slice 的写法

const result = Array.apply(null, {
    length: Math.ceil(data.length / groupByNum)
}).map((x, i) => {
    return data.slice(i * groupByNum, (i + 1) * groupByNum);
});

写法分析:

1. 首先使用了 Array.apply(null, {length: xxxx}) 来生成一个指定长度的数组,这里注意

new Array(length) 生成的是 [undefined x length],是一个长度为length的数组,元素未被赋值,与[undefined, undefined, ...] length个undefined的数组并不相同。

Array.apply(null, {length: xxxx}) 生成的是length个undefined的数组,可以使用map

new Array(length).map 是不能正常运行的,可以使用fill,new Array(length).fill().map 可以得到预期结果

2. apply后面的参数可以是一个类数组,甚至一个只包含length属性的对象

3. 生成数组之后,slice按照索引切割,返回数组作为一项


出处:https://segmentfault.com/a/1190000007464770

猜你喜欢

转载自www.cnblogs.com/mengff/p/9772305.html
今日推荐