JavaScript 中指定大小分割数组的一种实现

查看 64|回复 3
作者:huhailong1121   
今天分享一个使用 JavaScript 分割数组为多个自数组的方法实现。我使用它的场景如下:
给定一个数组 arr 和指定大小 fixed:
const arr = [
        {
                id: 1,
                name: 'name1'
        },
        {
                id: 2,
                name: 'name2'
        },
        {
                id: 3,
                name: 'name3'
        },
        {
                id: 4,
                name: 'name4'
        },
        {
                id: 5,
                name: 'name5'
        },
        {
                id: 6,
                name: 'name6'
        },
        {
                id: 7,
                name: 'name7'
        },
        {
                id: 8,
                name: 'name8'
        },
        {
                id: 9,
                name: 'name9'
        }
]
const fixed = 2;
期望的结果是生成一个数组,数组中包含 5 个数组,如下:
[
  [ { id: 1, name: 'name1' }, { id: 2, name: 'name2' } ],
  [ { id: 3, name: 'name3' }, { id: 4, name: 'name4' } ],
  [ { id: 3, name: 'name3' }, { id: 6, name: 'name6' } ],
  [ { id: 3, name: 'name3' }, { id: 6, name: 'name6' } ],
  [ { id: 3, name: 'name3' }, {} ]
]
按照 fixed 的大小分割,如果遇到不够 fixed 大小的,使用空对象填充。这种场景对表格数据填充需要等宽或者等数量会有所帮助。
具体实现代码如下:
/**
*
* @param {arr} 要分割的数组
* @param {fixed} 指定分割的大小
**/
function splitArr(arr, fixed) {
        let result = [];
        let size = arr.length;
        let len = Math.ceil(arr.length / fixed);//向上取整
        for(let i=0; i= size){
                                tempArr[j] = {}
                        }else{
                                tempArr[j] = arr[j];
                        }
                }
                result.push(tempArr);
                if(arr.length > 0){
                        arr.splice(i, fixed);
                }
        }
        return result;
}
const arr = [
        {
                id: 1,
                name: 'name1'
        },
        {
                id: 2,
                name: 'name2'
        },
        {
                id: 3,
                name: 'name3'
        },
        {
                id: 4,
                name: 'name4'
        },
        {
                id: 5,
                name: 'name5'
        },
        {
                id: 6,
                name: 'name6'
        },
        {
                id: 7,
                name: 'name7'
        },
        {
                id: 8,
                name: 'name8'
        },
        {
                id: 9,
                name: 'name9'
        }
]
const result = splitArr(arr, 2);
console.log(result);
希望本次分享的代码对你有所帮助,Thanks !!!
StrangerA   
为什么例子里分割后 id 为 3 的出现了 4 次,为 6 的出现了两次?
xjngbla   
没什么用,但是谢谢你
hay313955795   
function splitArr(arr, fixed) {
var index = 0;
var arrayLength = arr.length;
var result = [];
for (index = 0; index  Math.floor((item['id'] + 1) / fixed))
const newArr = Object.values(group).map((item) =>
new Array(fixed).fill({}).map((_, index) => item[index] || {}),
)
console.log(newArr)
```
执行结果:
```
[
[ { id: 1, name: 'name1' }, { id: 2, name: 'name2' } ],
[ { id: 3, name: 'name3' }, { id: 4, name: 'name4' } ],
[ { id: 5, name: 'name5' }, { id: 6, name: 'name6' } ],
[ { id: 7, name: 'name7' }, { id: 8, name: 'name8' } ],
[ { id: 9, name: 'name9' }, {} ]
]
```
op 你要的是这样的吗
您需要登录后才可以回帖 登录 | 立即注册

返回顶部