牛客网—JavaScript(7)—无重复数组

本文详细解释了如何使用JavaScript编写一个函数,接收数字范围和随机数个数作为参数,利用Set数据结构确保生成的随机数数组无重复元素。
摘要由CSDN通过智能技术生成

请补全JavaScript代码,实现一个函数,要求如下:
1. 根据输入的数字范围[start,end]和随机数个数"n"生成随机数
2. 生成的随机数存储到数组中,返回该数组
3. 返回的数组不能有相同元素
注意:
1. 不需要考虑"n"大于数字范围的情况

输入:
getUniqueNums(2,10,4)   //在2~10内生成四个随机数
输出:
[4,6,2,8]

Math.random() 取[num1,num2)之间int类型随机数的格式为 :

int random= (int)(Math.random()*(num2-num1)+num1)

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>

        <script>
            const _getUniqueNums = (start,end,n) => {
                // 补全代码
            var arr = new Set()
            for(var i = 0; i<n;i++){
                let random = Math.floor(Math.random()*(end-start)+start)
                arr.add(random)
        }
            return[...arr.values()]
            }
        </script>
    </body>
</html>

这段代码的作用是生成指定范围内的指定数量的不重复随机数数组。下面我逐步解析这段代码:

  1. const _getUniqueNums = (start, end, n) => { } 这是一个箭头函数的定义,接受三个参数 startendn,分别表示随机数的范围起始值、结束值,以及要生成的随机数的数量。

  2. var arr = new Set(): 这一行创建了一个空的 Set 对象 arr,Set 对象是一种特殊的数据结构,其中的元素是唯一的,不会重复。

  3. for(var i=0;i<n;i++){}这是一个 for 循环,用于生成指定数量的随机数。循环从 0 开始,直到 n,每次增加 1。

  4. let random = Math.floor(Math.random() * (end - start) + start): 这一行生成一个随机数 random,使用 Math.random() 生成一个 0 到 1 之间的随机小数,然后将其乘以 (end - start),这样可以得到一个在指定范围内的随机小数。然后使用 Math.floor() 向下取整,得到一个整数值,并加上 start,以确保随机数在指定范围内。

  5. arr.add(random): 这一行将生成的随机数 random 添加到 Set 对象 arr 中。由于 Set 对象的特性,如果添加的元素已经存在,则不会重复添加,保证了数组中的元素唯一性。

  6. return [...arr.values()]: 这一行将 Set 对象 arr 转换为数组,并返回该数组。arr.values() 返回一个迭代器对象,其中包含 Set 对象中的所有值,使用扩展运算符 [...arr.values()] 将迭代器对象转换为数组。

至于为什么使用 varlet

  • var 是 JavaScript 中的旧的变量声明关键字,在函数作用域内声明的变量具有函数级作用域。
  • let 是 ES6 新引入的变量声明关键字,具有块级作用域,只在包含它们的代码块内有效。 在这段代码中,使用 let 来声明循环中的 random 变量是因为 let 具有块级作用域,每次循环迭代都会创建一个新的 random 变量,避免了在循环中出现变量提升等问题。
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值