前几天帮一童鞋做了个排列的东西,将一个数组做排列,如果下一个与上一个相同就排在后面,不同就另起一列。单列有最大数限制,超过就折行。我也不知道叫啥,就长这样。
不难,但是容易乱。记录一下。
function sort(Arr, maxNumber) {
var Max = maxNumber - 1; //列最大数
var newArr = []; //新生成的数组
var fullArr = []; //"溢出"数据
var alikeN = 0; //相同数字个数
var alikeF = false; //是否为另外一组数字
var isM = 0; //最大空列值
var isFm = true; //是否为空列
for (var i = 0; i <= Max; i++) {
fullArr.push([])
}
Arr.map((v, i) => {
if (i == 0) {
newArr[0] = [v]
alikeN++
} else {
if (v == Arr[i - 1]) {
if (alikeN > Max) { //判断当前列数大于最大列数
if (fullArr[Max].length > 0) { //若已存储有当前数字
fullArr[Max].push(v) //添加至对应的列
} else {
fullArr[Max] = [v] //否则为当前数字新开一列
}
} else {
newArr[newArr.length - 1][alikeN] = v;
}
alikeN++
} else {
alikeF = true;
alikeN = 1;
newArr.push([v]);
isM = 0;
isFm = true;
fullArr.map((v1, i1) => { //将多出的数字按位添加至当前列
if (v1.length > 0) {
newArr[newArr.length - 1][i1] = v1[0];
v1.splice(0, 1)
}
if (v1.length == 0) {
if (isFm) {
isM = i1
}
} else {
isFm = false;
}
})
Max = isM //取可用最大位数
}
}
})
return newArr
}