抽奖

本文探讨了在特定范围内生成不重复随机数的方法,并深入分析了JavaScript中Array.sort的使用陷阱,以及如何利用Array的各种方法实现高效算法。

要求:

  • 有范围,闭区间
  • 起始值肯定大于1
  • 随机数不能重复

知识点:

  • Array.sort(fun):当fun返回的值在排序期间会变化时,排序的结果将是乱序。

  • Array(10):以数字为参数创建数组,将创建一个长度为参数的数组,每一项为undefined。

  • Array.keys():keys方法将数组的索引依次遍历,以数组的方式返回。

  • Array.map():数组的遍历方法。接收两个参数,

    第一个为函数(fn)为参数,fn有三个参数,第一个为遍历array的当前项,第二个参数为当前项的索引,第三个为被遍历的数组。
    第二个为执行fn时,this指向的对象。

  • 尾递归:用递归的规律做判断条件,为true,执行本身函数;为false,返回函数内存下的所需值。

		function dualColor(red: number = 6, blue: number = 1) {
		  const reds: [number, number] = [1, 33]
		  const blues: [number, number] = [1, 16]
		  return [randomBall(reds, red), randomBall(blues, blue)]
		}
		
		function randomBall(
		  fromto: number[],
		  total: number,
		  temp: number[] = [],
		): number[] {
		  const [head, ...body] = (temp.length
		    ? fromto
		    : [...Array(fromto[1]).keys()]
		        .splice(fromto[0] - 1)
		        .map(item => item + 1)
		  ).sort(() => Math.random() - 0.5);
		  return !total
		    ? temp
		    : randomBall(body, total - 1, temp.concat(head))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值