[1, 2, 3, 4, 5, 6, 7, 8]      实现效果      [[1, 2, 3, 4], [5, 6, 7, 8]]

 1. slice截取

        function fn(arr, num) {
            let newArr = []
            const total = Math.ceil(arr.length / num)
            console.log(total);
            for (let i = 0; i < total; i++) {
                a = arr.slice(i * num, (i + 1) * num)
                newArr.push(a)
            }
            return newArr
        }
        let arr = [1, 2, 3, 4, 5, 6, 7, 8]
        console.log(fn(arr, 4));

newArr 用来接收转换的二维数组

total 代表外层数组需要包含几个内层数组

slice进行分隔  第一个参数 开始截取的索引 第二个参数 结束的索引 

把每次截取的数组添加到newArr里

2.splice

先来学习一下深拷贝高级的代码

JSON.parse(JSON.stringify(obj||arr))
        function fn(arr, num) {
            let newArr = []
            let copyArr = JSON.parse(JSON.stringify(arr))
            const total = Math.ceil(arr.length / num)
            console.log(total);
            for (let i = 0; i < total; i++) {
                a = copyArr.splice(0, num)
                newArr.push(a)
            }
            return newArr
        }
        let arr = [1, 2, 3, 4, 5, 6, 7, 8]
        console.log(fn(arr, 4));

思路大致一致 只不过这次拿到的是splice的返回值 

注意直接splice拿到返回值 会改变原数组 注意哦 !!   相当于把原数组全部删除了,任何情况下最好都不要删除原数组,因为原数组可能还有别的地方要用到哈!

3. 遍历判断

   function fn(arr, num) {
            let newArr = []
            arr.forEach((it,idx) => {
                const total = Math.floor(idx / num) //判断当前在第几个数组内
                if(!(newArr[total])){ //判断当前是否有数组
                    newArr[total]=[]  //如果没有赋值一个空
                }
                newArr[total].push(it) // 并且把当前对应的索引里面进行添加
            });
            return newArr
        }
        let arr = [1, 2, 3, 4, 5, 6, 7, 8]
        console.log(fn(arr, 4));

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐