数组分组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

原文地址:https://www.cnblogs.com/mengff/p/9772305.html

时间: 2024-08-03 06:17:50

数组分组chunk的一种写法的相关文章

js之二维数组定义和初始化三种方法

方法一:直接定义并且初始化,这种遇到数量少的情况可以用 var _TheArray = [["0-1","0-2"],["1-1","1-2"],["2-1","2-2"]] 方法二:未知长度的二维数组 var tArray = new Array();   //先声明一维 for(var k=0;k<i;k++){        //一维长度为i,i为变量,可以根据实际情况改变

一维数组的三种写法

/** *一维 数组的几种写法 * 记住:①数组的左边不能有数字 *   ②数组的右边既然初始化了数组,那么就要赋值 */ //一维数组的标准格式 String[] arr1 = new String[]{"bo","li","jian"}; //上面的简写格式 String[] arr2 = {"bo","li","jian"}; //初始化容量 String[] arr3 = new

javascript数组去重算法-----4(另一种写法)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

关于数组去重的两种写法的思想!!!!!!

一般常规写法的思想,将当前项和下一项比较,如果相等,删除即可.我们来看看第一种写法吧!!function sortAry(ary){ for(var i=0;i<ary.length-1;i++){ for(var j=i+1;j<ary.length;j++){ if(ary[i]==ary[j]){ /*当前项ary[i]与后一项ary[i+1]相比较,如果相等就删除,*/ ary.splice(j,1); j--; /*注意数组塌陷,要添上j--*/ } } }}var ary=[2,1

javascript数组去重算法-----4(另一种写法__2)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

for循环的三种写法

第一种写法  传统的方法,遍历数组 String[] arr = { "amy", "heinrich", "cindy", "git" }; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } 打印台 amy heinrich cindy git 这种方式最简单,对数组还有集合都可以 第二种 而对于遍历Collection对象,这个循

鼠标移到图片变化的三种写法(可移植性强、代码少)

当鼠标移动到某个图片的时候,图片变化.当鼠标移出去的时候,图片变回来.下面是三种写法:第一种,也是最笨,最麻烦的写法,如下: 1 $(".web-footer2 .inner").each(function(){ 2 $(this).find("ul").eq(1).find("img").eq(0).hover(function(){ 3 $(this).attr("src","/img/footer-qq2.pn

Angular中依赖注入方式的几种写法

1.第一种写法 angular.module('App').controller('TestCtrl',['$scope', function($scope) {}]); 2.第二种写法 angular.module('App').controller('TestCtrl',TestCtrl); TestCtrl.$inject= ['$scope']; function TestCtrl($scope) {} 3.第三种写法 angular.module('App').controller('

angularjs controller的两种写法

在Angular中,Directive.Service.Filter.Controller都是以工厂方法的方式给出,而工厂方法的参数名对应着该工厂方法依赖的Service.如: app.controller('wolrdCtrl', function($scope, $http){     // ... }); 在上述的function执行之前,Angular Injector会生成一个$scope的实例和$http的实例,并传入该方法. 如果你希望对JS进行压缩处理,那么参数名就可能发生变化,