问题解析:首先是数组groupSizes[I],它所代表的是,第i个人所在组的大小。
解题思路:以此找1,2,3,4,。。。的数值,并按照数值大小归为一组。
1、从小到大找出每个组,比如说,先找大小为1的组的成员,就是找出groupSizes数组中值为1的索引,然后找出2的,3的,4.。。
2、把找出的索引按照组的大小分别分组。
for(var i=0;i<pos.length;i+=index){
result.push(pos.slice(i,i+index));
}
利用slice函数分组。该方法,按照索引切分数组。
3、保存数组。
4、迭代。
<script>
/**
* @param {number[]} groupSizes
* @return {number[][]}
*/
var groupSizes = [3,3,3,3,3,1,3];
var groupThePeople = function(groupSizes) {
var index=1; //每一次找的所在组的大小
var sum = 0; //用来存放已经分组掉几个数字
var result = []; //用来存放结果数组
var pos = []; //用来存储,每一个组大小所存在的人的索引
var co = [...groupSizes]; //rest参数复制数组,不是指针
function getAll(co,value){ //该函数的作用是找出数组中某个值的所有索引,indexOf只能找出第一个索引
var re = [];
var index=0;
index=groupSizes.indexOf(value);
co[index]=-1;
while(index!=-1){
re.push(index);
index=co.indexOf(value);
co[index]=-1;
}
return re;
}
while(sum<groupSizes.length){
pos = getAll(groupSizes,index);
sum +=pos.length;
for(var i=0;i<pos.length;i+=index){
result.push(pos.slice(i,i+index));
}
index+=1;
}
return result;
};
var result = groupThePeople(groupSizes);
console.log(result);
</script>
数组的at方法,和indexOf方法。
At方法指的是,在某个索引位置的值大小。
indexOf按照值的大小找索引。