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

发布于:2024-05-09 ⋅ 阅读:(23) ⋅ 点赞:(0)

今天分享一个使用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: 5, name: 'name5' }, { id: 6, name: 'name6' } ],
  [ { id: 7, name: 'name7' }, { id: 8, name: 'name8' } ],
  [ { id: 9, name: 'name9' }, {} ]
]

按照 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<len; i++){
		let tempArr = [];
		for(let j=0; j<fixed; j++){
			if((i*fixed)+j >= size){
				tempArr[j] = {}
			}else{
				tempArr[j] = arr[j];
			}
		}
		result.push(tempArr);
		if(arr.length > 0){
			arr.splice(0, 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!!!