js将一个数组分割成多个子数组

27 篇文章 1 订阅
10 篇文章 0 订阅

在做一个项目的时候需要将得到的json数据分组显示,于是自己写了个算法。将一个长数组分割成许多小数组保存起来。

/**
 * 分割数组创建二维数组封装
 * @param data 数组
 * @param senArrLen 需要分割成子数组的长度
 */
let splitArr = (data , senArrLen)=>{
    //处理成len个一组的数据
    let data_len = data.length;
    let arrOuter_len = data_len % senArrLen === 0 ? data_len / senArrLen : parseInt((data_len / senArrLen)+'') + 1;
    let arrSec_len = data_len > senArrLen ? senArrLen : data_len;//内层数组的长度
    let arrOuter = new Array(arrOuter_len);//最外层数组
    let arrOuter_index = 0;//外层数组的子元素下标
    // console.log(data_len % len);
    for (let i = 0; i < data_len; i++) {
        if (i % senArrLen === 0){
            arrOuter_index++;
            let len = arrSec_len * arrOuter_index;
            //将内层数组的长度最小取决于数据长度对len取余,平时最内层由下面赋值决定
            arrOuter[arrOuter_index-1] = new  Array(data_len % senArrLen);
            if(arrOuter_index === arrOuter_len)//最后一组
                data_len % senArrLen === 0 ?
                    len = data_len % senArrLen + senArrLen * arrOuter_index :
                    len = data_len % senArrLen + senArrLen * (arrOuter_index - 1);
            let arrSec_index = 0;//第二层数组的索引
            for (let k = i; k < len; k++) {//第一层数组的开始取决于第二层数组长度*当前第一层的索引
                arrOuter[arrOuter_index-1][arrSec_index] = data[k];
                arrSec_index++;
            }
        }
    }
    console.log(arrOuter);
};
splitArr([1,2,3,4,5,6,7,8] , 3);//[Array(3), Array(3), Array(2)] 0:(3) [1, 2, 3] 1:(3) [4, 5, 6] 2:(2) [7, 8]
splitArr([1,2,3,4,5,6] , 3);//[Array(3), Array(3)] 0:(3) [1, 2, 3] 1:(3) [4, 5, 6] 

主要解决的是最后一个子数组的长度和里面的内容不能undefined。

如果有不足之处请指正,相互学习。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值