分享上家的一个小需求,低配版“轮询”

1,405 阅读2分钟

       上家那时候,我刚画完页面,就接到了这个需求:
       一开始我刚拿到这个需求有些懵逼,履了履思路,然后还是一头懵逼。可能当时脑阔有点昏,不会写然后就是同事帮忙处理的。
       需求如下:
       现在我固定好了商品数量,和员工人数,将商品依次分给选定的人员。
       倘若每人分完以后,还有多的商品那么多的商品就优先分给编号靠前的人。
       例如:10个商品,3个人,最终结果为
       1号分到了:1,4,7,10 。
       2号分到了:2,5,8。
       3号分到了:3,6,9;
       一开始我不会整,后端首先给我提到了“轮询”这个词。网上大部分都是些什么ajax请求之类的啥啥啥的,然后大部分文章都是以一copy百而来,完全摸不到头绪。虽然需求理解,但不知道从何入手,最终还是被自己菜的出油的实力所击败,交由同事处理,同事处理完后我在改进,最终实现了效果。
       现如今我闲的,重新履了一遍然后就发现其实也没那么复杂。接下来咱们就开始上代码。
       

//先简单定义好商品,以及员工
var goods = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
var person = [
  {
    id: 1,
    good: []
  },
  {
    id: 2,
    good: []
  },
  {
    id: 3,
    good: []
  },
];
//然后我们需要知道我们这种可以轮几次,以及每一次循环开始的基数
var counts = 0; //可以循环几次
var num = 1; //每一次循环的基数
//如果商品足够每个人一人拿一件
if (goods.length % person.length == 0) {
  counts = parseInt(goods.length / person.length);
} else {
  //如果不够整除说明肯定有人多拿,轮次+1
  counts = parseInt(goods.length / person.length) + 1;
}
//具体轮几次,我们是未知数,所以用for循环
for (var index = 1; index <= counts; index++) {
	//当循环是第一轮,基数为1,以后基数为(人数*(轮数-1))
	if (index != 1) {
		num = (index - 1) * parseInt(person.length);
	} else {
		num = 1;
	}
        //每个人一轮一轮去拿对应的商品
	person.forEach((res, i) => {
                //这里主要是区分是不是第一轮
		if (index == num) {
			res.good.push(goods[i])
		} else {
        		//当商品存在时,添加到数组
			if (goods[i + num]) {
				res.good.push(goods[i + num])
			}
		}
	});
}
console.log(person);

最终总算是完成了这个花里胡哨的需求(因为本人偏菜,随意对本人来说有些花里胡哨,当然对各位大佬来说完全小case)。
        第一次发文,不是很会,大家别嫌弃。