使用:
let arrs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
this.averageArr(arrs, 4);
/**
* @name averageArr
* @param Array arr 原型数组
* @param Number nums 多少元素
* @description 按元素个数,均分数组
*/
averageArr = (arr, nums) => {
let indexNum = Number(nums); //设置每份多少个元素
let num = arr.length % indexNum;
let test = arr;
if (num !== 0) {
//补足arr,使其能够均分
test = test.concat(Array(indexNum - num).fill(0));
}
//test.reduce 按补全后的数组均分
//下方的push则是对原数组arr进行分割,则结果不会存在空元素
let res = test.reduce((pre, cur, index) => {
if ((index + 1) % indexNum === 0) {
if (pre.length === 0) {
pre.push(arr.slice(0, index + 1));
return pre;
} else {
pre.push(arr.slice(index - (indexNum - 1), index + 1));
return pre;
}
} else {
return pre;
}
}, []);
console.log("res==", res);
//[[1, 2, 3, 4], [5, 6, 7, 8],[ 9, 10, 11, 12], [13, 14]]
return res;
};
使用:
const arr = [1,2,3,4,5,6,7,8,9,0]
this.averageListArr(arr,4)
//[[1, 2, 3],[4, 5, 6],[7, 8],[9, 0]]
/**
* @name averageListArr
* @param Array arr 原型数组
* @param Number num 多少列
* @description 按列数,均分数组;列数num,行内元素平分
*/
function averageListArr(arr = [], num) {
let baseNum = Math.floor(arr.length / num); //每列元素数,向下取整
let surNum = arr.length % num; //余数,从头分配
let resArr = [];
let arrNum = [];
let totalNum = 0;
let totalPrevNum = 0;
for (let i = 0; i < num; i++) {
arrNum.push(baseNum + (i < surNum ? 1 : 0));
}
for (let j = 0; j < arrNum.length; j++) {
totalNum += arrNum[j];
if (j === 0) {
resArr.push(arr.slice(j, arrNum[j]));
} else {
totalPrevNum += arrNum[j - 1];
resArr.push(arr.slice(totalPrevNum, totalNum));
}
}
return resArr;
}